正则表达集团没有开始

时间:2014-11-21 07:57:44

标签: regex regex-group

我在一台计算2个正则表达式时遇到问题(用于处理.ini文件)

我已经有了这个(我建议你使用rubular这些例子来理解)

^(?<key>[^=;\r\n]+)=((?<value>\"*.*;*.*\"[^;\r\n]*);?(?<comment>.*)[^\r\n]*)

匹配:

  • 这=&#34; IsNot运算; acomment&#34;
  • 这=&#34; isa&#34 ;;评论
  • 这=&#34;赛;特殊&#34 ;;情况

我得到了这个:

^(?<key>[^=;\r\n]+)=(?<value>[^;\r\n]*);?(?<comment>[^\r\n]*)

匹配

  • 这= isasimplecase
  • 此= isasimple;注释

我试图合并2个正则表达式,遗憾的是我无法说出&#34;如果我的价值组没有开始使用\&#34;如果不使用第一个,请使用第二个&#34;。

现在我得到了这个:

^(?<key>[^=;\r\n]+)=(((?<value>\"*.*;*.*\"[^;\r\n]*);?(?<comment>.*)[^\r\n]*)|(?<value>[^;\r\n]*);?(?<comment>[^\r\n]*))

但它创造了另外两个没有引用的简单案例的部分。我想也许可以通过添加&#34;简单案例的值组的第一项不能以\&#34;开头。但我没有设法做到这一点。

PS:我建议你使用rubular来更好地理解我的问题。对不起,如果我不够清楚

1 个答案:

答案 0 :(得分:0)

这个怎么样?

^(?<key>[^=;\r\n]+)=(?<value>"[^"]*"|[^;\n\r]*);?(?<comment>.*)

DEMO

  • (?<key>[^=;\r\n]+)匹配=符号前面的部分。
  • "[^"]*"匹配双引号中的字符串,例如"foobar"之类的字符串。如果没有",则正则表达式引擎会转到下一个[^;\n\r]*模式,并且它与第一个;或换行符或\r字符匹配。这些匹配的字符存储在名为value的命名组中。
  • ;?可选分号。
  • (?<comment>.*)剩余的字符存储在comment组中。