Perl正则表达式的模式匹配量词是"贪婪的"(它们匹配最长的可能字符串).为了迫使比赛"不合适",一个?可以附加到模式量词(*,+).
这是一个例子:
#!/usr/bin/perl
$string="111s11111s";
#-- greedy match
$string =~ /^(.*)s/;
print "$1\n"; # prints 111s11111
#-- ungreedy match
$string =~ /^(.*?)s/;
print "$1\n"; # prints 111
Run Code Online (Sandbox Code Playgroud)
但是如何在Perl中找到第二,第三和......可能的字符串匹配?举一个你的简单例子 - 如果需要更好的一个.
我正在逐行读取一个文件,并希望得到的行以任何东西而不是AB开头,并且包含一个(至少)三位浮点数后跟一个百分号(即任何浮点数%大于或等于100%).
例如:
AA whatevs 102.342% dontcare #MATCH
AB whatevs 102.342% dontcare #MISMATCH
AC whatevs 12.3042% dontcare #MISMATCH *
AD whatevs 102% dontcare #MATCH *
AE whatevs 2002.3042% dontcare #MATCH
AF whatevs 22.3021% dontcare #MISMATCH
AG whatevs 102.342 12.342% dontcare #MISMATCH **
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有以下正则表达式解决方案,它没有AD whatevs 102% dontcare明显的原因捕获.
/^(?!AB).*\d{3}\.\d*%/
Run Code Online (Sandbox Code Playgroud)
/^(?!AB).*\d{3}\.?\d*%/也不起作用,因为它匹配AF whatevs 22.3021% dontcare.
我知道我可以通过将我的正则表达式分成两个子正则表达式来实现它..但是,我想看看是否有一个正则表达式解决方案.
以下代码段使用标准正确编译gcc。这里可能存在哪些陷阱?--特别是对于内核级开发。
int n;
f(){n=2;}
g(){int b[n];}
main(){
int a[n];
f();
g();
}
Run Code Online (Sandbox Code Playgroud)