使用preg_match将字符串提取到数组之间:& |人物

时间:2016-05-23 15:23:24

标签: php regex preg-match

我试图从字符串中提取序列号以比较匹配,并认为可能使用preg_match,但我正在与正则表达式斗争。

有人可以提供任何帮助吗?

目前的尝试如下:

$example = "CPM-200:0123456L|CPM-100:9876543L|CJ Pro:CJP33-011";

pre_match("/\:(.*?)\|/", $example, $matches);
var_dump($matches);

目前上述情况吐出:

Array(2) {
  [0]=> string(10) ":0123456L|"
  [1]=> string(8) "0123456L"
}

但实际上我想把它提取到:

Array(0) {
  [0] => 0123456L
  [1] => 9876543L
  [2] => CJP33-011
}

我对正则表达式从未如此出色!我已经尝试了各种组合,以上是我能够接近的最接近的组合。需要找到一个体面的在线教程。

4 个答案:

答案 0 :(得分:5)

您可以使用此

: #Match :
([^|]+) #Match anything other than |
(?:
  \| #Match | literally
    | #Alternation(OR) --> Match | or $
   $ #End of string
)

<强> Regex Demo

正则表达式细分

$re = "/:([^|]+)(?:\\||$)/"; 
$str = "CPM-200:0123456L|CPM-100:9876543L|CJ Pro:CJP33-011"; 

preg_match_all($re, $str, $matches);
print_r($matches[1]);

PHP代码

{{1}}

<强> Ideone Demo

答案 1 :(得分:2)

你必须改变你的正则表达式,以便它也能抓住最后一个元素。

你必须使用preg_match_all而不是preg_match来捕获每个结果:

preg_match_all("/\:(.*?)(?:[\|]|$)/", $example, $matches);

答案 2 :(得分:0)

$data = "CPM-200:0123456L|CPM-100:9876543L|CJ Pro:CJP33-011";
$array  =  str_word_count($data,1,'0123456789L ');
for ($i = 0; $i < count($array); $i += 2)
    $new_array[] = $array[$i+1];
echo "<pre>";
print_r($new_array);

答案 3 :(得分:0)

$data = "CPM-200:0123456L|CPM-100:9876543L|CJ Pro:CJP33-011";
$array = preg_split('/[\|:]/', $data, -1, PREG_SPLIT_NO_EMPTY);
$new_array = array_diff($array,array("CPM-200","CPM-100","CJ Pro"));
echo "<pre>";
print_r($new_array);