我有一个读取文本文件的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
但由于正则表达式无效,我没有得到任何结果
实现这一目标的正确正则表达方式是什么?谢谢
答案 0 :(得分:1)
试试这个正则表达式。可以通过连接每个匹配的Group1和Group2中存在的内容来形成所需的移动号码。
^((?:M:)?\(\d{3}\))\s*(\d{3}-\d{4})
<强>解释强>
((?:M:)?\(\d{3}\))
- 捕获第1组
(?:M:)?
- 匹配字母M
\(
- 按字面意思匹配(
\d{3}
- 匹配3位数字\)
- 按字面意思匹配)
\s*
- 匹配0个或更多空白字符(\d{3}-\d{4})
- 第二个捕获组,其中包含3位数的序列,后跟-
,后跟另外4位数字