如何在PHP正则表达式中包含新行
我有一个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 = "";
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
-捕获组1((?:M:)?\(\d{3}\)
-匹配字母(?:M:)?
0或1次出现M
-按字面意思匹配\(
)(
-匹配3位数字\d{3}
-按字面意思匹配\)
)
-匹配0个或更多空白字符\s*
-第二个捕获组,包含3个数字的序列,后跟一个(\d{3}-\d{4})
,后跟另外4个数字-
(+ 1),但考虑使用锚,它减少了所需的步骤:更新。你说得对。当我使用
^
锚定时,步骤数减少了。感谢它的工作,但有时电话号码会像这样出现(999)。我如何在正则表达式中添加一些内容以捕获并打印它?(999)?三位数的电话号码?你能举个例子吗?像这样:09/27/17 3:00p sam1,SAM15(999)17 09/27/17 3:30p mark1,