获取带有多个分隔符的字符串中某些符号后面的所有整数

问题描述 投票:0回答:3

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

  • 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
但我根本无法弄清楚这一点。 这些数字并不具体,可以是任意数量的数字。

php regex preg-match-all text-extraction delimited
3个回答
3
投票

尝试以下:

preg_match_all('/(?<==)[^|]*/', $string, $matches);
var_dump($matches);

1
投票

描述

这个表达将:

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

\d+(?=[,|\n\r]|\Z)
现场演示

enter image description here

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)
现场演示

enter image description here


0
投票

要提取前面有等号或逗号的所有整数,请使用lookbehind。

代码:(演示

preg_match_all('/(?<=[=,])\d+/', $inout, $matches);
var_dump($matches[0]);

或者匹配分隔符,然后用

\K
忘记,然后匹配数字。 演示

preg_match_all('/[=,]\K\d+/', $input, $matches);
© www.soinside.com 2019 - 2024. All rights reserved.