preg_match numberstring with separator PHP

时间:2015-10-16 09:11:07

标签: php regex

我有一个包含以下数据类型的数据库列:

123/456 Big street road
789/123/112 Yellow road
23/23/2-44 Little brick street 221
1/2 Ocean view 4

我想只提取前斜杠分隔的数字。像这样:

123/456
789/123/112
23/23/2
1/2

为此我设计了以下模式:

<?php
    preg_match("/[0-9]{1,4}\/[0-9]{1,4}|\/([0-9]{1,4})/", $data, $result);
?>

毋庸置疑......我还不是全部;)

5 个答案:

答案 0 :(得分:1)

试试这个

<?php
preg_match_all('/\d{1,4}(?:\/\d{1,4})+/g', $data, $result);

事情是:

  1. preg_match_all()显示所有匹配项而不是第一个匹配项
  2. / g修饰符指出将通过所有文本
  3. 搜索匹配项

答案 1 :(得分:0)

这可能是你想要匹配的东西:

preg_match_all('/[0-9]{1,4}(?:\/[0-9]{1,4})+/', $data, $result);

使用non-capturing group (?:\/[0-9]{1,4})+重复任意数量的斜杠和数字。

regex101 demo

如果您想限制2到3之间的数字,可以将+更改为:

/[0-9]{1,4}(?:\/[0-9]{1,4}){1,2}/

答案 2 :(得分:0)

如果它的格式始终相同,则可以将其展开:

$row = '123/456 Big street road'; 
list($numbersWithSlashes) = explode(" ", $row);

var_dump($numbersWithSlashes);

正如我的老师总是说:

  

懒惰的程序员是优秀的程序员。做同样的事情,同时让它变得更容易。

如果 te是正则表达式或格式不保证相同,请跳过我的回答。

答案 3 :(得分:0)

懒惰/简易解决方案 -

是否保证数据和您想要的数据之间总是存在空间? (你可以控制它,这就是你总是存储数据的方式)

在这种情况下,只需按空格分割并获取数组中的第一项。

$string  = "123/456 Big street road";
$strArray = explode(" ", $string);
echo $strArray[0]; //you may also check that this value does have "/"

我很确定正则表达式大师会提供更好的答案:)。祝你好运。

答案 4 :(得分:0)

您也可以使用此正则表达式:

preg_match_all('/^([^\/]+\/\S+)/g', $data, $result)