【问题标题】:preg_match does not match regexpreg_match 与正则表达式不匹配
【发布时间】:2015-12-30 10:31:52
【问题描述】:

我正在尝试使用正则表达式和预匹配从网站上抓取 10 位数字。到目前为止还没有得到任何结果。当我使用前两个注释掉的 $regex 变量中的常规字符时,它匹配。但不是当我像其他人一样使用正则表达式时。

我在这里检查了所有其他类似的问题。然而一直无法理解为什么下面的正则表达式脚本输出空数组,如

数组(1) { [0]=> 数组(0) { } }

代码

<?php 
$data=file_get_contents("http://www.landshoppe.com/contactus");
//$regex = '/9833157945/';
//$regex = "/<a href='(.+?)'>/";
$regex='/^[0-9]\b\d{10}\b$/';

//$regex='/\(?\s?[2-9][0-9]{2}[(\s?\)?\s?)\-\.]{1,3}[0-9]{3}[\s\-\.]{1,3}[0-9]{10}/';
//$regex='/\[^\d\]/';
preg_match_all($regex,$data,$match);
//preg_match_all($regex,"9898989898 kmllkj 9087654567 kjhkhkhj 9043567898 hkhkjhkjhk",$match);
//  var_dump($data);
//  echo htmlspecialchars($data);

var_dump($match); 
echo "<p></p>";
foreach($match as $m){foreach($m as $ma){echo $ma."<br>";}}
//echo $match[1];
?>

如果您观察到,我一直在尝试各种正则表达式组合,但都没有给出结果。

【问题讨论】:

    标签: php regex preg-match match preg-match-all


    【解决方案1】:

    请注意,此表达式:/^[0-9]{5}$/ 将匹配完全由 5 位数字组成的字符串。 ^$ 指示引擎从头开始匹配并一直持续到最后。这与 /9833157945/ 的表达式不同,后者表示一个特定的 10 位数字。

    您至少需要将其更改为 \d{10} 以匹配 10 位数字。如果数字不能包含在其他字符串中,即foo0123456789,则可以使用\b 标签:\b\d{10}\b

    【讨论】:

    • 嗨...@npinti 非常抱歉。我非常不擅长正则表达式。 {5} 是疏忽。我已将问题编辑为 10 位数字..并且还添加了 \b\d 。我不确定我是否做得对。但仍然给我空数组。
    • @user3526204:您能否用$data 的示例值更新您的问题?
    • $data 是我们从 url 的 file_get_contents 得到的。它基本上是页面的源文件。
    【解决方案2】:

    '/[0-9]\d{10}/' 解决了我的问题!它现在匹配所有 10 位数字!

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      相关资源
      最近更新 更多