正则表达式所有不包含字符串的字符串?

Geo*_*uer 24 regex

好的,所以这是完全愚蠢的事情,但这是我从未学会做的事情和麻烦.

如何指定不包含其他字符序列的字符串.例如,我想匹配所有不以'.config'结尾的行

我认为我可以做到

.*[^(\.config)]$
Run Code Online (Sandbox Code Playgroud)

但这不起作用(为什么不呢?)

我知道我能做到

.*[^\.][^c][^o][^n][^f][^i][^g]$
Run Code Online (Sandbox Code Playgroud)

但请告诉我有更好的方法

Man*_*anu 47

你可以使用负面的lookbehind,例如:

.*(?<!\.config)$
Run Code Online (Sandbox Code Playgroud)

这匹配所有字符串,但以".config"结尾的字符串除外

  • 它们不等同.(?<!)匹配前面的字符串(后面看),而(?!)匹配下面的字符串(向前看) (2认同)

Tim*_*ker 20

你的问题包含两个问题,所以这里有几个答案.

匹配完全不包含某个字符串的行(比如说.config):

^(?:(?!\.config).)*$\r?\n?
Run Code Online (Sandbox Code Playgroud)

不匹配的行结束在某个字符串:

^.*(?<!\.config)$\r?\n?
Run Code Online (Sandbox Code Playgroud)

并且,作为奖励:匹配不以某个字符串开头的行:

^(?!\.config).*$\r?\n?
Run Code Online (Sandbox Code Playgroud)

(每次包括换行符,如果存在的话.

哦,并回答为什么你的版本不起作用:[^abc]意思是"除了a,b或c之外的任何一个(1)字符".你的另一个解决方案也会失败test.hg(因为它也以字母g结尾 - 你的正则表达式单独查看每个字符而不是整个.config字符串.这就是为什么你需要环顾来处理它.