1

我有一个需要匹配的字符串,它可以是各种格式:

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, 4411但我根本想不通。这些数字不是具体的,它们可以是任意数量的数字。

我只是在学习 regex 和 preg_match 并且无法弄清楚。我不知道我在做什么。

非常感谢任何帮助。

4

2 回答 2

3

试试下面:

preg_match_all('/(?<==)[^|]*/', $string, $matches);
var_dump($matches);
于 2013-08-30T02:15:44.830 回答
1

描述

该表达式将:

  • 只匹配数字
  • 要求数字在数字后直接有逗号、竖线或字符串结尾,这样可以防止包含等号的数字。

\d+(?=[,|\n\r]|\Z) Live Demo

在此处输入图像描述

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) Live Demo

在此处输入图像描述

于 2013-08-30T12:38:06.643 回答