是否有可能使用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()'並從那裏開始工作。 –