我正在尝试将一段正则表达式放在一起,以匹配不包含某个字符串的行。到目前为止,我有以下内容:
/^((?!abc).)*$/igm
我遇到的问题是我尝试使用的系统不完全支持正则表达式,因此我无法使用?!
表示法。
我将如何做到这一点?
答案 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]*$
您可能希望使用工具生成此类模式,而不是自己编写。