我不确定它是如何被称为:否定,互补或反转。这个概念就是这样。例如,字母“ab”
R = 'a'
!R = the regexp that matche everyhting exept what R matches
在这个简单的例子中,它应该像
一样!R = 'b*|[ab][ab]+'
如何调用这样的正则表达式?我从学习中得知,有一种方法可以计算出来,但这种方法很复杂,而且通常很难手工制作。是否有一个很好的在线工具(或常规软件)来做到这一点?
答案 0 :(得分:3)
如果您正在搜索所有内容,那么正则表达式的某些软件/语言可以取消内置的匹配。例如,使用grep,您可以使用'-v'选项来获取不包含的内容t匹配和我见过的SQL变体允许你使用'not'限定符来否定匹配。
一些/大多数/所有正则表达式方言支持的另一个选择是使用“负向前瞻”。您可能需要查找特定的语法,但这是一个非常值得一读的有趣工具。通常它是这样的:if R='<regex>'
,然后是Negative_of_R='(?!<regex>)'
。不幸的是,它可能因语言的特殊性而异(例如vim使用\(<regex>\)\@!
)。
提醒一句:如果你不小心,否定的正则表达式会比你期望的更多。如果你有This doesn't match 'mystring'.
文字并搜索(?!mystring)
,那么它将匹配除mystring中的'm'之外的所有内容。
答案 1 :(得分:3)
jbo5112的回答给出了很好的实际帮助。然而,在理论方面:正则表达式对应于常规语言,因此您正在寻找的术语是互补的。
补充正则表达式:
您现在拥有原始正则表达式的补充!