正则表达式匹配多个负向前瞻

时间:2014-11-27 23:30:55

标签: regex perl regex-lookarounds

我正在尝试匹配一个字符串(使用Perl正则表达式),只要它不以“abc:”或“defg:”开头,但我似乎无法弄清楚如何。我尝试过像

这样的东西
^(?:(?!abc:)|(?!defg:))

7 个答案:

答案 0 :(得分:11)

Lookahead (?=foo)(?!foo)和lookbehind (?<=foo)(?<!foo)不会使用任何字符。

你可以:

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

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

订单没有任何区别。

答案 1 :(得分:5)

尝试这样做:

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

答案 2 :(得分:1)

...或者可能已经删除了原始表达式的替换:

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

答案 3 :(得分:1)

^(?!abc:|defg:)\s*\w+

使用此正则表达式。 这样可以避免使用“abc:”“defg:”开始。

答案 4 :(得分:0)

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

试试这个。看看演示。

http://regex101.com/r/hQ9xT1/18

答案 5 :(得分:0)

这将完成任务:

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

答案 6 :(得分:0)

请你试试这个:

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
相关问题