正则表达式逗号后的可选匹配
我很努力并得到了这么远,但最终它不工作!正则表达式逗号后的可选匹配
我想要做的是以下几点: 我有一个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