我不知道它是怎么称呼的:否定、互补或倒置。这个概念是这样的。例如有字母“ab”
R = 'a'
!R = the regexp that matche everyhting exept what R matches
在这个简单的例子中,它应该是这样的
!R = 'b*|[ab][ab]+'
这样的正则表达式如何调用?我记得在我的研究中,有一种计算方法,但它很复杂,而且通常很难手工制作。是否有一个不错的在线工具(或常规软件)可以做到这一点?
我不知道它是怎么称呼的:否定、互补或倒置。这个概念是这样的。例如有字母“ab”
R = 'a'
!R = the regexp that matche everyhting exept what R matches
在这个简单的例子中,它应该是这样的
!R = 'b*|[ab][ab]+'
这样的正则表达式如何调用?我记得在我的研究中,有一种计算方法,但它很复杂,而且通常很难手工制作。是否有一个不错的在线工具(或常规软件)可以做到这一点?
jbo5112 的回答提供了很好的实际帮助。但是,在理论上:正则表达式对应于正则语言,因此您正在寻找的术语是补充。
要补充正则表达式:
您现在有了原始正则表达式的补码!
如果您所做的只是搜索,那么一些用于正则表达式的软件/语言可以否定内置的匹配。例如,使用 grep 您可以使用“-v”选项来获取不匹配的行和我见过的 SQL 变体允许您使用“非”限定符来否定匹配。
一些/大多数/所有正则表达式方言支持的另一个选项是使用“负前瞻”。您可能需要查看您的特定语法,但它是一个有趣的工具,非常值得一读。通常它是这样的:如果R='<regex>'
,那么Negative_of_R='(?!<regex>)'
。不幸的是,它会随着你的语言特性而变化(例如 vim 使用\(<regex>\)\@!
)。
提醒一句:如果你不小心,否定的正则表达式会比你预期的更多。如果您有文本This doesn't match 'mystring'.
并搜索(?!mystring)
,那么它将匹配除 mystring 中的 'm' 之外的所有内容。