正则表达式逗号后的可选匹配

我很努力并得到了这么远,但最终它不工作!正则表达式逗号后的可选匹配

我想要做的是以下几点: 我有一个preg_replace_callback函数,我想解决我的“字典”功能。

我用我自己的 “字典” 标签:

<[general,username]> 

<[general,username,1]>

这应该叫我的功能 “字典”。它的功能是ararguments是:dictionary($search,$section,$upper=null)

$search = filename 

$section = array key

$upper = (int) 1 to 3

我的回调函数调用从“字典”标记的值的功能。

for <[general,username]> I need 

- $search = general

- $section = username

- $upper = null

but for <[general,username,1]> I want

- $search = general

- $section = username

- $upper = 1

我希望我的正则表达式总是匹配2个参数(搜索和部分),但有一个第三个可选参数。

我的正则表达式:

/\<\[([^\[]+)\,([^\[]+)(\,[0-2])?\]\>/ 

,但这不能正常工作。我得到如下结果:

为< [一般情况下,用户名]>我得到

[0] => <[general,username]> 

[1] => general

[2] => username

为< [一般情况下,用户名,1]>我得到

[0] => <[general,username,1]> 

[1] => general,username

[2] => 1

但我想

[0] => <[general,username,1]> 

[1] => general

[2] => username

[3] => 1

我在做什么错?

回答:

尝试了这一点:

/\<\[([^\,]+)\,([^\,]+)(?:\,(\d+))?\]\>/ 

- Item[0] => whole matching text

- Item[1] => general

- Item[2] => username

- Item[3] => upper (if match)

回答:

默认情况下,正则表达式是贪婪的,所以第一组也匹配第一个逗号。尝试这个代替:

/\<\[([^\[,]+)\,([^\[,]+)(?:\,([0-2]))?\]\>/ 

回答:

排除来自所述第二组的范围的逗号....

或者,假设第一2项仅为字母数字:

\<\[(\w+)\,(\w+)\,?(\d+)?\]\> 

以上是 正则表达式逗号后的可选匹配 的全部内容, 来源链接: utcz.com/qa/258656.html

回到顶部