我试图从字符串中提取序列号以比较匹配,并认为可能使用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
}
我对正则表达式从未如此出色!我已经尝试了各种组合,以上是我能够接近的最接近的组合。需要找到一个体面的在线教程。
答案 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);