Regex Perl正则表达式否定
如何对该正则表达式求反(不使用Regex Perl正则表达式否定,regex,perl,regex-negation,Regex,Perl,Regex Negation,如何对该正则表达式求反(不使用!~) 注意:abc、def或ghi前面或后面可以是字符串 if ( $Line =~ /^(?!.*(?:abc|def|ghi))/s ) { 也就是说,不可能在字符串开始后的任何地方匹配该模式。另一个选项可以是使用,除非而不是,如果: unless ($Line=~/(?:abc|def|ghi)/){printf("abc|def|ghi is not present\n");} else {printf("
!~
)
注意:abc、def或ghi前面或后面可以是字符串
if ( $Line =~ /^(?!.*(?:abc|def|ghi))/s ) {
也就是说,不可能在字符串开始后的任何地方匹配该模式。另一个选项可以是使用
,除非而不是,如果:
unless ($Line=~/(?:abc|def|ghi)/){printf("abc|def|ghi is not present\n");}
else {printf("abc|def|ghi is present\n");}
另一种方法是,这可能使您能够更好地控制各个组件子字符串
# (?s)^(?:(?:(?!abc|def|ghi).)+|)$
(?s)
^
(?:
(?:
(?!
abc
| def
| ghi
)
.
)+
|
)
$
我很好奇您不想使用的原因~代码>。你能告诉我吗?因为我把正则表达式作为参数传递给一个子例程。把一个标志传递给表示负或正的子例程是一个更简单的解决方案。维护一个正则表达式/标志对的列表。一个小小的解释会非常有用:)你想要解释哪一部分?为什么我需要一个^
?如果没有它,它将尝试匹配字符串中最后一个abc、def或ghi开头之后的某个地方,并成功(因为它不会匹配该点之后的任何部分)def和ghi/^(?)*(?:abc))(?=*?def)(?=*?ghi)/s
如果您的意思是匹配任何不包含abc且包含def或ghi的字符串,/^(?)*(?:abc))*(?:def | ghi)/s
# (?s)^(?:(?:(?!abc|def|ghi).)+|)$
(?s)
^
(?:
(?:
(?!
abc
| def
| ghi
)
.
)+
|
)
$