【问题标题】:PHP extract only 4digit numbers from string containing 4digit,5digit,6digit numbersPHP 从包含 4 位、5 位、6 位数字的字符串中仅提取 4 位数字
【发布时间】:2018-11-09 06:25:32
【问题描述】:

enter image description here我已经尝试了许多 php 函数,如 strpos()、preg_match(),但它们都不起作用。我有一个字符串

我只想提取四位数字,即 1234。

<?php
 $texxt="abcd1245 784563 1234 98756 kfg7456178";
 $results=array();
 preg_match('/[0-9]{4}/', $texxt, $results);
 print_r($results);
 ?>

但上面的代码返回 1245 而不是 1234。如果我删除 abcd1245,则输出为 7845。实际的字符串非常大,它包含 200 多个数字,如上。我只想要确切的 4 位数字。有没有办法解决这个问题?

【问题讨论】:

  • 不确定您为什么编辑您的尝试,因为help center 声明您应该提供您的尝试。
  • 是的,它起作用了,你能解释一下那些 b 是什么吗?
  • 我没有故意删除代码,这是一个错误
  • \b 是一个单词边界。它匹配单词的“边缘”。现在,这仍将匹配非字母数字字符(例如 -)。所以它仍然会匹配字符串-1234。如果这不是您想要的,那么您可以使用\s 代替\b
  • 在我的实际字符串中有带和不带空格的 4 位数字,例如“1234”和“1234”,正则表达式在这种情况下也可以工作吗?

标签: php regex string


【解决方案1】:

您需要在图案的两侧设置边界。

\b\d{4}\b

另一种方法是使用\s 而不是\b 作为空格 - 因为边界将匹配其他非字母数字字符。完全取决于您要查找的内容。

See it here

【讨论】:

    【解决方案2】:

    正如你所说,你有超过 200 个号码,然后使用下面的代码:

    <?php
     $texxt="abcd1245 784563 1234 3421 98756 kfg7456178";
     $results=array();
     preg_match_all('/\b\d{4}\b/', $texxt, $results);
     print_r($results);
    ?>
    

    preg_match 只检查一次出现,而preg_match_all 检查所有出现。 正则表达式解释请参考doc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      相关资源
      最近更新 更多