正则表达式抓住第二个参数组

时间:2013-04-22 23:11:46

标签: c# regex

我现在的正则表达式如下:

(?<token>#gallery (?<id>[^#]+)#)

我用它来获取一些信息。

如果是#gallery d23d23d#

它会将d23d23d作为名为Id的分组。

我需要扩展这个以允许其他参数,所以我可以抓住

#gallery d23d23d foo#并将d23d23dfoo作为单独的群组?

我的正则表达技巧是绝望的,一些帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

如果要准确捕获两组,请使用:

(?<token>#gallery\s+(?<id>[^\s#]+)\s+(?<foo>[^\s#]+)#)

foo将包含第二个捕获组。请注意使用\s来计算空格以外的空格字符以及在组之间使用\s+以允许参数之间有多个空白字符。

要捕获零,一个,两个组使用:

(?<token>#gallery(?:\s+(?<p1>[^\s#]+)(?:\s+(?<p2>[^\s#]+)(?:\s+(?<p3>[^\s#]+))?)?)?#)

群组p1p2p3将首先显示群组,token无需匹配。

要捕获任意数量的组(包括无),请使用

(?<token>#gallery(?:\s+(?<id>[^\s#]+))*#)

虽然组Value的{​​{1}}将仅包含最后一个匹配的参数,但它的id属性将包含所有其他参数。