正则表达式:匹配所有不包含某个字符串的字符串?

32 浏览
0 Comments

正则表达式:匹配所有不包含某个字符串的字符串?

这个问题已经有了答案:

正则表达式匹配不包含某个单词的行

好的,这是非常愚蠢的一个问题,但我从未学会如何解决它,这让我很麻烦。

那么,我要怎样指定一个字符串,以便可以不包含其他字符序列?例如,我想匹配所有不以“.config”结尾的行。

我认为我可以这样做

.*[^(\.config)]$

但这行不通(为什么呢?)

我知道我可以这样做

.*[^\.][^c][^o][^n][^f][^i][^g]$

但请告诉我有没有更好的方法。

admin 更改状态以发布 2023年5月22日
0
0 Comments

你的问题包含两个问题,以下是一些答案。

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

^(?:(?!\.config).)*$\r?\n?

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

^.*(?

还有一个额外的问题:匹配不以某个字符串开始的行:

^(?!\.config).*$\r?\n?

(每行包括换行符,如果有)。

哦,关于为什么你的方法不起作用: [^abc] 表示“除了a、b、c以外的任意一个字符”。你的另一个解决方案也会在 test.hg 上失败(因为它也以字母g结尾——你的正则表达式会逐个字符地匹配,而不是整个 .config 字符串。这就是为什么你需要 lookaround 处理这个问题。

0
0 Comments

你可以使用否定回顾后发断言,例如:

.*(?

这会匹配除了以".config"结尾的所有字符串。

0