正则表达式不包含字符串而不使用?

时间:2015-12-22 11:38:55

标签: regex

我正在尝试将一段正则表达式放在一起,以匹配不包含某个字符串的行。到目前为止,我有以下内容:

/^((?!abc).)*$/igm

我遇到的问题是我尝试使用的系统不完全支持正则表达式,因此我无法使用?!表示法。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:0)

您尝试使用的符号是否定前瞻断言,并且某些编程语言在正则表达式中不支持环视,因此如果您正在使用其中一种语言试图找到支持它们的替代库。

如果您无法启用对环视断言的支持,则根本无法否定正则表达式的部分。

答案 1 :(得分:0)

技术上有可能,但是非常笨拙。 即使像abc这样简单的事情也会导致一种相当模糊的模式:

^([^a]|a+[^ab]|a+b[ab]*[^abc])*[ab]*$

小提琴:https://regex101.com/r/xH8dE9/3

说明:

^                    start of string
(
[^a]                 not 'a'
|
a+[^ab]              'a' but not 'ab'
|
a+b[ab]*[^abc]       'ab' but not 'abc'
)*
[ab]*$               left-overs at the end of the string

对于较长的单词,模式以二次方式增长。对于第一个字母出现不止一次的单词变得特别复杂,例如adam。它看起来像这样(未经测试):

^([^a]|a+[^ad]|a*(ad)+([^ad]|a[^adm]))*[ad]*$

您可能希望使用工具生成此类模式,而不是自己编写。