如何在PHP正则表达式中包含新行

如何在PHP正则表达式中包含新行,php,regex,preg-match,Php,Regex,Preg Match,我有一个php脚本,可以读取文本文件。此文本文件如下所示 09/27/17 3:00p sam1, sam 15 (999) 999-9999 M:(888) 888-8888 17 09/27/17 3:30p mark1, marke asd 15 (777) 777-7777 M:(666) 666-6666 17 我需要做的是提取电话号码,但问题是电话号码被分成两行,正如你所看到的 我的PHP脚本: $string = "";

我有一个php脚本,可以读取文本文件。此文本文件如下所示

09/27/17 
3:00p  
sam1, 
sam  
15 
(999) 
999-9999
M:(888) 
888-8888 
17  
09/27/17  
3:30p   
mark1, 
marke  
asd
15 
(777) 
777-7777 
M:(666) 
666-6666 
17 
我需要做的是提取电话号码,但问题是电话号码被分成两行,正如你所看到的

我的PHP脚本:

    $string = ""; 
    $date=array();
    $data1 = file("data.txt"); 
    for($i =0; $i < count($data1);$i++)
 { 
    $data = explode(" ",$data1[$i]); 
    $line = $data[0]; 
    //$string .=$line; 

    if (preg_match('^[M:]\([0-9]{3}\)[0-9]{3}-[0-9]{4}/s^',$line)) {
        $string .= $line."\n"; 
    }

    if (preg_match('^\([0-9]{3}\)[0-9]{3}-[0-9]{4}/s^',$line)) {
        $string .= $line."\n"; 
    }

 }
   (999)999-9999,M:(888)888-8888  
   (777)777-7777,M:(666)666-6666 
但是我没有得到任何结果,因为正则表达式无效


实现这一点的正确正则表达式是什么?谢谢

试试这个正则表达式。所需的移动电话号码可以通过连接这些匹配项的Group1和Group2中存在的内容来形成

^((?:M:)?\(\d{3}\))\s*(\d{3}-\d{4})

说明:

    $string = ""; 
    $date=array();
    $data1 = file("data.txt"); 
    for($i =0; $i < count($data1);$i++)
 { 
    $data = explode(" ",$data1[$i]); 
    $line = $data[0]; 
    //$string .=$line; 

    if (preg_match('^[M:]\([0-9]{3}\)[0-9]{3}-[0-9]{4}/s^',$line)) {
        $string .= $line."\n"; 
    }

    if (preg_match('^\([0-9]{3}\)[0-9]{3}-[0-9]{4}/s^',$line)) {
        $string .= $line."\n"; 
    }

 }
   (999)999-9999,M:(888)888-8888  
   (777)777-7777,M:(666)666-6666 
  • ((?:M:)?\(\d{3}\)
    -捕获组1
    • (?:M:)?
      -匹配字母
      M
      0或1次出现
    • \(
      -按字面意思匹配
    • \d{3}
      -匹配3位数字
    • \)
      -按字面意思匹配
  • \s*
    -匹配0个或更多空白字符
  • (\d{3}-\d{4})
    -第二个捕获组,包含3个数字的序列,后跟一个
    -
    ,后跟另外4个数字


(+ 1),但考虑使用锚,它减少了所需的步骤:更新。你说得对。当我使用
^
锚定时,步骤数减少了。感谢它的工作,但有时电话号码会像这样出现(999)。我如何在正则表达式中添加一些内容以捕获并打印它?(999)?三位数的电话号码?你能举个例子吗?像这样:09/27/17 3:00p sam1,SAM15(999)17 09/27/17 3:30p mark1,