Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在perl中顺序匹配多个正则表达式模式_Regex_Perl - Fatal编程技术网

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
  }
}