Regex 如何在perl中顺序匹配多个正则表达式模式
我想用以下方法对大型多行文本进行匹配: 我有一些匹配模式:Regex 如何在perl中顺序匹配多个正则表达式模式,regex,perl,Regex,Perl,我想用以下方法对大型多行文本进行匹配: 我有一些匹配模式: $text=~m#finance(.*)end#s $text=~m#(.*)s $text=~m#/data(.*s) 如果其中一个匹配,则打印结果print$1,然后继续执行其余文本以再次匹配三种模式 如何按照打印结果在全文中的显示顺序获取打印结果 非常感谢你的帮助 分支重置操作符在这里很有用:(|⋯|⋯|⋯|⋯)。我习惯性地坚持5.00503兼容性,因为这是我以前雇主的标准Perl。(大学…)@geekosaur:今天在这里工作时
$text=~m#finance(.*)end#s代码>
$text=~m#(.*)s代码>
$text=~m#/data(.*s)代码>
如果其中一个匹配,则打印结果print$1
,然后继续执行其余文本以再次匹配三种模式
如何按照打印结果在全文中的显示顺序获取打印结果
非常感谢你的帮助 分支重置操作符在这里很有用:(|⋯|⋯|⋯|⋯)代码>。我习惯性地坚持5.00503兼容性,因为这是我以前雇主的标准Perl。(大学…)@geekosaur:今天在这里工作时有个问题。如果我在匹配中有多个捕获,例如while($text=~m#)(?:finance(.*)ac(.*)end(.*)bb(.*)数据(.*)sgx){
,如何使用$+
选择匹配项?我尝试了$1+
,但没有效果。再次感谢。这一点比较难;$+
表示最后一个成功匹配的组,它不是修饰符,不能与其他说明符一起使用。您可以测试捕获组是否定义了l更新上述内容。分支重置运算符在此处很有用:(?)|⋯|⋯|⋯|⋯)代码>。我习惯性地坚持5.00503兼容性,因为这是我以前雇主的标准Perl。(大学…)@geekosaur:今天在这里工作时有个问题。如果我在匹配中有多个捕获,例如while($text=~m#)(?:finance(.*)ac(.*)end(.*)bb(.*)数据(.*)sgx){
,如何使用$+
选择匹配项?我尝试了$1+
,但没有效果。再次感谢。这一点比较难;$+
表示最后一个成功匹配的组,它不是修饰符,不能与其他说明符一起使用。您可以测试捕获组是否定义了我在上面更新了。
while ($text =~ m#(?: finance (.*?) end
| <class> (.*?) </class>
| data (.*?) </end>
)
#sgx) {
print $+;
}
while ($text =~ m#(?: a (.*?) b (.*?) c
| d (.*?) e (.*?) f
| data (.*?) </end>
)
#sgx) {
if (defined $1) {
# first set matched (don't need to check $2)
}
elsif (defined $3) {
# second set matched
}
else {
# final one matched
}
}