正则表达式:(simple|complex)
文字:using simple with key value pairs using complex with key value pairs using simple with key value pairs
如果使用了simple
值,是否有任何方式只匹配一次,而不是两次?
答案 0 :(得分:0)
#!/usr/bin/perl
#
use Data::Dumper;
my @ex=qw(simple complex simplycomplex complexcomplexbutsimple simplebutcomplex);
sub runexamples {
my $qr=shift;
my @matches;
for my $example (@ex) {
push @matches, [($example =~ /$qr/)];
}
return \@matches;
}
print Dumper(runexamples(qr/(complex|simple)/));
此程序如果运行产生以下输出
$VAR1 = [
[
'simple'
],
[
'complex'
],
[
'complex'
],
[
'complex'
],
[
'simple'
]
];
未设置全局修饰符且两者都复杂"和"简单"被正确检测到。如果第一个字符串是"简单"然后,即使字符串"复杂"也在场。
答案 1 :(得分:0)
以下表达式仅匹配其中包含simple
或complex
的行,但仅限于仅出现一次的行:
^(?=(?:(?!simple).)*?(?:(?:simple)(?:(?!simple).)*?$|$))(?=.*?(?:simple|complex))(?=(?:(?!complex).)*?(?:(?:complex)(?:(?!complex).)*?$|$)).*?$
确保表达式处于多行模式,无论您使用什么来实现此目的(大多数情况下默认为多行模式)。
匹配
using simple with complex here
eggs are both complex and simple all at once
simple
complex
some simple things
some complex things
不匹配:
this is irrelevant
eggs are both complex and simple all at once said simple simon
simple simple
complex complex
表达式可以分为三个要求:
(?=.*?(?:simple|complex))
该行必须包含' simple'或者'复杂' (?=(?:(?!simple).)*?(?:(?:simple)(?:(?!simple).)*?$|$))
该行只能出现一次或不出现简单(?=(?:(?!complex).)*?(?:(?:complex)(?:(?!complex).)*?$|$))
该行只能出现一次或不出现复杂的