我有一个需要匹配的字符串,它可以是各种格式:
5=33
5=14,21
5=34,76,5
5=12,97|4=2
5=35,22|4=31,53,71
5=98,32|7=21,3|8=44,11
我需要出现在等号 (=) 和竖线 (|) 符号之间或行尾的数字。 所以在最后一个例子中我需要
98
,32
,21
,3
,44
,11
但我根本无法弄清楚这一点。 这些数字并不具体,可以是任意数量的数字。
尝试以下:
preg_match_all('/(?<==)[^|]*/', $string, $matches);
var_dump($matches);
这个表达将:
\d+(?=[,|\n\r]|\Z)
现场演示
NODE EXPLANATION
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
[,|\n\r] any character of: ',', '|', '\n'
(newline), '\r' (carriage return)
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\Z before an optional \n, and the end of
the string
--------------------------------------------------------------------------------
) end of look-ahead
样品
使用此表达式,字符串
5=98,32|7=21,3|8=44,11
将返回一个字符串数组:
[0] => 98
[1] => 32
[2] => 21
[3] => 3
[4] => 44
[5] => 11
您可以查找所有后面没有等号的数字
\d+(?!=|\d)
现场演示