regex 匹配多个负查找头的正则表达式

bq8i3lrv  于 2022-11-18  发布在  其他
关注(0)|答案(7)|浏览(111)

我试图匹配一个字符串(使用Perl正则表达式),只要它不是以“abc:“或“defg:“开头,但我似乎找不到方法。

^(?:(?!abc:)|(?!defg:))
0ejtzxu1

0ejtzxu11#

先行(?=foo)(?!foo)和后行(?<=foo)(?<!foo)不使用任何字符。
您可以执行多个Assert:

^(?!abc:)(?!defg:)

或:

^(?!defg:)(?!abc:)

......而且顺序并不重要。

2022年11月编辑:

您可以使用De Morgan(与其他答案一样):

(NOT A) AND (NOT B) <=> NOT (A OR B)

...并将表达式缩短为:

^(?!abc:|defg:)
9o685dep

9o685dep2#

请尝试执行以下操作:

^(?!(?:abc|defg):)
mnemlml8

mnemlml83#

使用此正则表达式:
^(?!abc:|defg:)\s*\w+
这将避免以**“abc:““defg:“**作为行首。

eit6fx6z

eit6fx6z4#

......或者我们可以从原始表达式中删除替换:

^(?:(?!abc:)(?!defg:))
o8x7eapl

o8x7eapl5#

请你试试这个:

use strict;
use warnings;
use Cwd;

while(<DATA>)
{
    my $line=$_;
    print $line unless($line=~m/^(abc|defg*)/m);
}

__DATA__
ebc this is testing ebc
dbc this is testing dbc
defg this is testing defg
abc this is testing abc
defg this is testing defg
yr9zkbsy

yr9zkbsy6#

^(?:(?!abc:|defg:).)*$

试试这个。请参阅 http://regex101.com/r/hQ9xT1/18 上的演示。

wnavrhmk

wnavrhmk7#

这将完成任务:

^(?!(defg|abc):).*

相关问题