【发布时间】:2014-11-27 23:30:55
【问题描述】:
我试图匹配一个不以“abc:”或“defg:”开头的字符串(使用 Perl 正则表达式),但我似乎不知道如何。我试过类似的东西
^(?:(?!abc:)|(?!defg:))
【问题讨论】:
-
要求任何不以 abc 开头的字符串:或不以 defg: 开头,即任何字符串
标签: regex perl regex-lookarounds
我试图匹配一个不以“abc:”或“defg:”开头的字符串(使用 Perl 正则表达式),但我似乎不知道如何。我试过类似的东西
^(?:(?!abc:)|(?!defg:))
【问题讨论】:
标签: regex perl regex-lookarounds
Lookahead (?=foo)、(?!foo) 和lookbehind (?<=foo)、(?<!foo) 不使用任何字符。
你可以做多个断言:
^(?!abc:)(?!defg:)
或:
^(?!defg:)(?!abc:)
...顺序没有区别。
【讨论】:
尝试这样做:
^(?!(?:abc|defg):)
【讨论】:
使用这个正则表达式:
^(?!abc:|defg:)\s*\w+
这将根据需要避免以 "abc:" 和 "defg:" 开头的行。
【讨论】:
…或者我们可以从原始表达式中删除替换:
^(?:(?!abc:)(?!defg:))
【讨论】:
你能试试这个吗:
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
【讨论】:
^(?:(?!abc:|defg:).)*$
试试这个。请参阅 http://regex101.com/r/hQ9xT1/18 上的演示。
【讨论】:
\b 是多余的,OP 没有说明后面的任何内容。
这将完成任务:
^(?!(defg|abc):).*
【讨论】: