如何在正则表达式中匹配“在此字符序列之前的任何内容”?

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

如果在其后面添加一个*/^[^abc]*/–正则表达式将继续向结果中添加每个后续字符,直到它遇到abc

例如,对于源字符串“qwerty qwerty which abc hello”,表达式将匹配到“qwerty qwerty wh”

但是如果我希望匹配的字符串是“qwerty qwerty whatever”

…换句话说,我如何将所有内容匹配到(但不包括)精确的序列“abc”

您没有指定使用哪种风格的正则表达式,但这将
在任何一个最受欢迎的,可以被认为是“完整”的工作

/.+?(?=abc)/

工作原理

+?部分是+的非贪婪版本(一个或多个
任何东西)。当我们使用+时,引擎将基本上匹配所有内容。
然后,如果正则表达式中还有其他内容,它将按步骤返回
尝试匹配以下部分。这就是贪婪的行为,
意味着尽可能满足

当使用+?时,不要一次匹配所有项并返回
其他条件(如果有),引擎将通过以下方式匹配下一个字符:
步骤,直到正则表达式的后续部分匹配为止(如果有,请再次执行)。
这是不贪婪的,意味着匹配的可能性最小
满足

/.+X/~“abcXabcXabcX”/.+/~“abcXabcXabcX”
^^^^^^^^^^^^                  ^^^^^^^^^^^^
/.+?X/~“abcXabcXabcX”/.+?/~“abcXabcXabcX”
^^^^                          ^

接下来我们有(?={contents},一个零宽度
断言
,环顾四周。此分组结构与其
内容,但不算作匹配的字符(零宽度)。信息技术
仅在匹配与否时返回(断言

因此,在其他术语中,regex/.+?(?=abc)/表示:

尽可能少地匹配任何字符,直到找到“abc”,
不算“abc”

发表评论