如何在正则表达式中匹配“直到这个字符序列”的任何内容?

如何在正则表达式中匹配“直到这个字符序列”的任何内容?

拿这个正则表达式:/^[^abc]/。这将匹配字符串开头的任何单个字符,a,b或c除外。

如果你*在它之后添加- /^[^abc]*/- 正则表达式将继续将每个后续字符添加到结果中,直到它遇到a a b c

例如,使用源字符串"qwerty qwerty whatever abc hello",表达式将匹配"qwerty qwerty wh"

但是如果我想要匹配的字符串呢? "qwerty qwerty whatever "

...换句话说,我怎样才能匹配到(但不包括)确切序列的所有内容 "abc"


慕哥6287543
浏览 1580回答 3
3回答

函数式编程

您没有指定您正在使用哪种正则表达式,但这适用于任何可被视为“完整”的最流行的正则表达式。/.+?(?=abc)/这个怎么运作这 .+? 部分是.+ (一个或多个任何东西)的非贪婪版本 。当我们使用时.+,引擎将基本匹配所有内容。然后,如果正则表达式中还有其他内容,它将返回尝试匹配以下部分的步骤。这是 贪婪的行为,意味着尽可能地满足。使用时 .+?,引擎将不是一次匹配并返回其他条件(如果有的话),引擎将逐步匹配下一个字符,直到匹配正则表达式的后续部分(如果有的话)。这是不贪婪的,意味着 尽可能少地满足。/.+X/  ~ "abcXabcXabcX"        /.+/  ~ "abcXabcXabcX"           ^^^^^^^^^^^^                  ^^^^^^^^^^^^ /.+?X/ ~ "abcXabcXabcX"        /.+?/ ~ "abcXabcXabcX"           ^^^^                          ^接下来我们有 一个 零宽度断言, 环顾四周。此分组构造与其内容匹配,但不计为匹配的字符(零宽度)。只有在匹配与否时才会返回(断言)。(?={contents})因此,在其他方面,正则表达式/.+?(?=abc)/意味着:匹配任何字符尽可能少,直到找到“abc”,而不计算“abc”。

呼唤远方

如果你想捕捉到“abc”的所有内容:/^(.*?)abc/说明:( )使用捕获的括号内的访问的表达$1,$2等等。^ 匹配线的开始.*匹配任何东西,?非贪婪(匹配所需的最小字符数) - [1][1]需要这样做的原因是,否则,在以下字符串中:whatever whatever something abc something abc默认情况下,正则表达式是贪婪的,这意味着它将尽可能匹配。因此/^.*abc/会匹配“无论什么东西abc某事”。添加非贪婪量词?使得正则表达式只匹配“无论什么东西”。

慕容森

正如@Jared Ng和@Issun指出的那样,解决这种RegEx的关键是“匹配某个单词或子串的所有内容”或“匹配某个单词或子串后的所有内容”称为“环视”零长度断言。在这里阅读更多相关信息。在您的特定情况下,可以通过积极展望来解决。一张图片胜过千言万语。请参阅屏幕截图中的详细说明。
打开App,查看更多内容
随时随地看视频慕课网APP