是否有可能使用PHP的preg_match
可变长度模式?例如,一个JSON样式列表。REGEX的列表
下面的正则表达式
\{[0-9]*\:[0-9]*\}
比赛为
{1:2,2:7}
但是我还需要它来匹配
{1:9,2:8}
我设想类似
\{([0-9]*\:[0-9]*)[\,[0-9]*\:[0-9]*]*\}
带有某种非必需的,但有效的,具有*
例分组:https://regex101.com/r/ZPSvs2/2
是否有可能使用PHP的preg_match
可变长度模式?例如,一个JSON样式列表。REGEX的列表
下面的正则表达式
\{[0-9]*\:[0-9]*\}
比赛为
{1:2,2:7}
但是我还需要它来匹配
{1:9,2:8}
我设想类似
\{([0-9]*\:[0-9]*)[\,[0-9]*\:[0-9]*]*\}
带有某种非必需的,但有效的,具有*
例分组:https://regex101.com/r/ZPSvs2/2
您可以使用
\{[0-9]+:[0-9]+(?:,[0-9]+:[0-9]+)?}
或 - 如果你也想匹配诸如{2:5,445:46,54567:5677}
琴弦 - 使用
\{[0-9]+:[0-9]+(?:,[0-9]+:[0-9]+)*}
^
详细:
\{
- 一个{
符号(这是没有必要逃避它,但仍然是一个好主意)[0-9]+
- 1+位数:
- 冒号(没有必要逃避它,因为它不是一个特殊的正则表达式元字符)[0-9]+
- 1+ digits(?:,[0-9]+:[0-9]+)?
1或0(由于?
,与*
替换如果需要允许0或更多)的序列:
,
- 逗号[0-9]+:[0-9]+
- 见上文}
- 文字结尾}
。较短版本使用的子程序相同的正则表达式的:
\{([0-9]+:[0-9]+)(?:,(?1))?}
参见another regex demo其中(?1)
重复组1的模式。
完美的谢谢你细节的细节,这是有道理的,适用于这种情况。 –
你似乎什么是后:
{\d+:\d+(,\d+:\d+)*}
将匹配:
该处理额外的情况下,如{1:9,2:8,2:7}
什么问题是什么呢? – jeroen
您的第一个示例应该是“{1:2}”吗? –
如果可能的话,尽量避免REGEX,它可以使你的代码不可读。正则表达式有时可能有用,但通常有更好的解决方案。在你的例子中,我会使用'json_decode()'并从那里开始工作。 –