我试图匹配一个字符串(使用Perl正则表达式),只要它不是以“abc:“或“defg:“开头,但我似乎找不到方法。
^(?:(?!abc:)|(?!defg:))
0ejtzxu11#
先行(?=foo)、(?!foo)和后行(?<=foo)、(?<!foo)不使用任何字符。您可以执行多个Assert:
(?=foo)
(?!foo)
(?<=foo)
(?<!foo)
^(?!abc:)(?!defg:)
或:
^(?!defg:)(?!abc:)
......而且顺序并不重要。
2022年11月编辑:
您可以使用De Morgan(与其他答案一样):
(NOT A) AND (NOT B) <=> NOT (A OR B)
...并将表达式缩短为:
^(?!abc:|defg:)
9o685dep2#
请尝试执行以下操作:
^(?!(?:abc|defg):)
mnemlml83#
使用此正则表达式:^(?!abc:|defg:)\s*\w+这将避免以**“abc:“和“defg:“**作为行首。
^(?!abc:|defg:)\s*\w+
eit6fx6z4#
......或者我们可以从原始表达式中删除替换:
^(?:(?!abc:)(?!defg:))
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
yr9zkbsy6#
^(?:(?!abc:|defg:).)*$
试试这个。请参阅 http://regex101.com/r/hQ9xT1/18 上的演示。
wnavrhmk7#
这将完成任务:
^(?!(defg|abc):).*
7条答案
按热度按时间0ejtzxu11#
先行
(?=foo)
、(?!foo)
和后行(?<=foo)
、(?<!foo)
不使用任何字符。您可以执行多个Assert:
或:
......而且顺序并不重要。
2022年11月编辑:
您可以使用De Morgan(与其他答案一样):
...并将表达式缩短为:
9o685dep2#
请尝试执行以下操作:
mnemlml83#
使用此正则表达式:
^(?!abc:|defg:)\s*\w+
这将避免以**“abc:“和“defg:“**作为行首。
eit6fx6z4#
......或者我们可以从原始表达式中删除替换:
o8x7eapl5#
请你试试这个:
yr9zkbsy6#
试试这个。请参阅 http://regex101.com/r/hQ9xT1/18 上的演示。
wnavrhmk7#
这将完成任务: