php和regex:如何在多行上preg_match?

时间:2014-07-07 20:17:54

标签: php regex

我的HTML是:

line1
line2

line3 59800 line4
line5
line6

我的目标是捕获:(25个左边的字符)59800(25个右字符):

我试过

/.{1,25}59800.{1,25}/igm

但我只捕获:

line3 59800 line4

如何捕捉多行?

以下是测试:http://regexr.com/39498

2 个答案:

答案 0 :(得分:4)

取而代之的是m在你的正则表达式中使用s(DOTALL)标志:

/.{1,25}59800.{1,25}/s

s修饰符用于使DOT匹配换行符,其中m用于在多行输入的每一行中使锚点^ and $匹配。

答案 1 :(得分:1)

添加到@anubhava's answer,这是正确的:

  • 您不需要i标记,因为正则表达式中没有提到的字母
  • PHP中不存在g标志。
  • 您还可以使用(?s)激活DOTALL模式,允许点在线间匹配

在PHP中,你可以这样做:

$regex = '~(?s).{1,25}59800.{1,25}~';
if (preg_match($regex, $yourstring, $m)) {
    $thematch = $m[0];
    } 
else { // no match...
     }