我现在的正则表达式如下:
(?<token>#gallery (?<id>[^#]+)#)
我用它来获取一些信息。
如果是#gallery d23d23d#
它会将d23d23d
作为名为Id
的分组。
我需要扩展这个以允许其他参数,所以我可以抓住
#gallery d23d23d foo#
并将d23d23d
和foo
作为单独的群组?
我的正则表达技巧是绝望的,一些帮助将不胜感激。
感谢。
答案 0 :(得分:0)
如果要准确捕获两组,请使用:
(?<token>#gallery\s+(?<id>[^\s#]+)\s+(?<foo>[^\s#]+)#)
组foo
将包含第二个捕获组。请注意使用\s
来计算空格以外的空格字符以及在组之间使用\s+
以允许参数之间有多个空白字符。
要捕获零,一个,或两个组使用:
(?<token>#gallery(?:\s+(?<p1>[^\s#]+)(?:\s+(?<p2>[^\s#]+)(?:\s+(?<p3>[^\s#]+))?)?)?#)
群组p1
,p2
和p3
将首先显示群组,token
无需匹配。
要捕获任意数量的组(包括无),请使用
(?<token>#gallery(?:\s+(?<id>[^\s#]+))*#)
虽然组Value
的{{1}}将仅包含最后一个匹配的参数,但它的id
属性将包含所有其他参数。