我试图在Perl中提出一个匹配多个模式的正则表达式,并在PHP中返回所有这些模式,如preg_match_all
。
这就是我所拥有的:
$str = 'testdatastring';
if($str =~ /(test|data|string)/) {
print "its found index location: $0 $-[0]-$+[0]\n";
print "its found index location: $1 $-[1]-$+[1]\n";
print "its found index location: $2 $-[2]-$+[2]\n";
print "its found index location: $3 $-[3]-$+[3]\n";
}
这只给了我第一场比赛,其中就是'测试'。我希望能够匹配所有出现的指定模式:'test','data'和'string'。
我知道在PHP中,你可以使用preg_match_all来达到这种目的:
if(preg_match_all('/(test|data|string)/', 'testdatastring', $m)) {
echo var_export($m, true);
}
上面的PHP代码将匹配所有3个字符串:'test','data'和'string'。
我想知道如何在Perl中执行此操作。任何帮助将不胜感激。
答案 0 :(得分:11)
Perl相当于
preg_match_all('/(test|data|string)/', 'testdatastring', $m)
是
@m = ("testdatastring" =~ m/(test|data|string)/g);
/ g标志代表全局,因此它返回列表上下文中的匹配列表。
答案 1 :(得分:2)
见http://www.anaesthetist.com/mnm/perl/regex.htm。基本语法(从那里)是:
$_ = "alpha xbetay xgammay xdeltay so on";
($first, $second, $third) = /x(.+?)y/g;
请注意/ g