采用以下正则表达式:/^[^abc]/。这将匹配字符串开头的任何单个字符,a、b或c除外。
如果在其后面添加*–/^[^abc]*/–正则表达式将继续向结果中添加每个后续字符,直到它满足a、b或c。
例如,对于源字符串“qwerty qwerty whatever abc hello”,表达式将匹配到“qwerty-qwerty wh”。
但如果我希望匹配的字符串是“qwerty qwerty whatever”呢?
换句话说,我如何将所有内容都匹配到(但不包括)精确的序列“abc”?
采用以下正则表达式:/^[^abc]/。这将匹配字符串开头的任何单个字符,a、b或c除外。
如果在其后面添加*–/^[^abc]*/–正则表达式将继续向结果中添加每个后续字符,直到它满足a、b或c。
例如,对于源字符串“qwerty qwerty whatever abc hello”,表达式将匹配到“qwerty-qwerty wh”。
但如果我希望匹配的字符串是“qwerty qwerty whatever”呢?
换句话说,我如何将所有内容都匹配到(但不包括)精确的序列“abc”?
当前回答
如果您希望捕获“abc”以下的所有内容:
/^(.*?)abc/
说明:
()捕获括号内的表达式,以便使用$1、$2等进行访问。
^匹配行首
.*匹配任何内容?非贪婪(匹配所需的最小字符数)-[1]
[1] 需要这样做的原因是,否则,在以下字符串中:
whatever whatever something abc something abc
默认情况下,正则表达式是贪婪的,这意味着它将尽可能匹配。因此/^.*abc/将匹配“whateverwhatever某物abc某物”。添加非贪婪量词?使正则表达式只匹配“无论什么”。
其他回答
我相信你需要子表达式。子表达式可以使用普通()括号。
本部分来自grep手册:
反向引用和子表达式后引用\n(其中n是一个数字)与子字符串匹配之前由正则表达式。
做类似于^[^(abc)]的事情应该会奏效。
你需要看看断言,比如.+?(?=abc)。
请参阅:零长度断言的前瞻性和滞后性
请注意[abc]与abc不同。在括号内,它不是一个字符串-每个字符只是一种可能性。在括号外,它成为字符串。
这将对正则表达式有意义。
确切的单词可以从以下regex命令中获得:
("(.*?)")/g
在这里,我们可以得到属于双引号内的全局准确单词。
例如,如果我们的搜索文本是
这是“双引号”单词的示例
然后我们会从那句话中得到“双引号”。
如果您希望捕获“abc”以下的所有内容:
/^(.*?)abc/
说明:
()捕获括号内的表达式,以便使用$1、$2等进行访问。
^匹配行首
.*匹配任何内容?非贪婪(匹配所需的最小字符数)-[1]
[1] 需要这样做的原因是,否则,在以下字符串中:
whatever whatever something abc something abc
默认情况下,正则表达式是贪婪的,这意味着它将尽可能匹配。因此/^.*abc/将匹配“whateverwhatever某物abc某物”。添加非贪婪量词?使正则表达式只匹配“无论什么”。
$标记字符串的结尾,因此类似这样的操作应该有效:[[^abc]*]$,其中您要查找的任何内容都不以abc的任何迭代结尾,但它必须位于结尾
此外,如果您使用的是带有正则表达式的脚本语言(如PHP或JavaScript),它们有一个搜索函数,当它第一次遇到模式时停止(您可以指定从左开始或从右开始,或者使用PHP,您可以执行内爆以镜像字符串)。