-2

我有一个字符串

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

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

有人在我之前的问题preg_match 中给我写了以下代码来连续匹配三个数字的子字符串?几分钟前:

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

基线是我想匹配三个数字,后跟任何大写字母,然后是包括 \t 在内的任何内容?提前致谢。

4

2 回答 2

5

您可以通过使用前瞻断言preg_split()来告诉在字符串中的任何点拆分后跟三位数字。

$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标志是因为字符串的开头也是三个数字的点,因此此处发生空拆分。我们可以将正则表达式更改为不在字符串的开头拆分,但这会使一目了然地理解起来有点困难,而标志非常清晰。

于 2012-12-31T13:46:30.313 回答
-1

我尝试了匹配而不是拆分

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

似乎为您的样品获得了正确的结果

于 2012-12-31T13:48:29.877 回答