基于php中的数字拆分字符串数组?

时间:2012-12-31 13:34:17

标签: php regex preg-match preg-split

我有一个字符串

 $str = "101WE3P-1An Electrically-Small104TU5A-3,Signal-Interference Duplexers Gomez-GarciaRobertoTU5A-3-01"

我想用数字拆分这个字符串,例如:“101WE3P-1An ....”应该是第一个元素,“104TUA ......”应该是第二个元素?

有人在几分钟之前在my previous question preg_match to match substring of three numbers consecutively?写了以下代码:

$result = preg_split('/^\d{3}$/', $page, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

基线是我想匹配三个数字后跟任何大写字母,其次是包括\ t?提前谢谢。

2 个答案:

答案 0 :(得分:5)

您可以告诉preg_split()使用lookahead assertion在字符串中的任意一点拆分后跟三位数。

$str = "101WE3P-1An Electrically-Small104TU5A-3,Signal-Interference Duplexers Gomez-GarciaRobertoTU5A-3-01";
$result = preg_split('/(?=\d{3})/', $str, -1, PREG_SPLIT_NO_EMPTY);

var_export($result);

提供以下数组:

array (
  0 => '101WE3P-1An Electrically-Small',
  1 => '104TU5A-3,Signal-Interference Duplexers Gomez-GarciaRobertoTU5A-3-01',
)

使用PREG_SPLIT_NO_EMPTY标志,因为字符串的开头也是有三个数字的点,因此这里会发生空分割。我们可以改变正则表达式,使其不会在字符串的最开始分割,但这会让它一目了然地变得难以理解,而标志非常清晰。

答案 1 :(得分:-1)

我尝试过匹配而非分裂

preg_match_all('/^(\d{3}.*?)*$/', $str, $matches);
var_dump($matches);

似乎可以为您的样本获得正确的结果