我有一个包含以下数据类型的数据库列:
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);
?>
毋庸置疑......我还不是全部;)
答案 0 :(得分:1)
试试这个
<?php
preg_match_all('/\d{1,4}(?:\/\d{1,4})+/g', $data, $result);
事情是:
答案 1 :(得分:0)
这可能是你想要匹配的东西:
preg_match_all('/[0-9]{1,4}(?:\/[0-9]{1,4})+/', $data, $result);
使用non-capturing group (?:\/[0-9]{1,4})+
重复任意数量的斜杠和数字。
如果您想限制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)