我在一台计算2个正则表达式时遇到问题(用于处理.ini文件)
我已经有了这个(我建议你使用rubular这些例子来理解)
^(?<key>[^=;\r\n]+)=((?<value>\"*.*;*.*\"[^;\r\n]*);?(?<comment>.*)[^\r\n]*)
匹配:
我得到了这个:
^(?<key>[^=;\r\n]+)=(?<value>[^;\r\n]*);?(?<comment>[^\r\n]*)
匹配
我试图合并2个正则表达式,遗憾的是我无法说出&#34;如果我的价值组没有开始使用\&#34;如果不使用第一个,请使用第二个&#34;。
现在我得到了这个:
^(?<key>[^=;\r\n]+)=(((?<value>\"*.*;*.*\"[^;\r\n]*);?(?<comment>.*)[^\r\n]*)|(?<value>[^;\r\n]*);?(?<comment>[^\r\n]*))
但它创造了另外两个没有引用的简单案例的部分。我想也许可以通过添加&#34;简单案例的值组的第一项不能以\&#34;开头。但我没有设法做到这一点。
PS:我建议你使用rubular来更好地理解我的问题。对不起,如果我不够清楚
答案 0 :(得分:0)
这个怎么样?
^(?<key>[^=;\r\n]+)=(?<value>"[^"]*"|[^;\n\r]*);?(?<comment>.*)
(?<key>[^=;\r\n]+)
匹配=
符号前面的部分。"[^"]*"
匹配双引号中的字符串,例如"foobar"
之类的字符串。如果没有"
,则正则表达式引擎会转到下一个[^;\n\r]*
模式,并且它与第一个;
或换行符或\r
字符匹配。这些匹配的字符存储在名为value
的命名组中。;?
可选分号。(?<comment>.*)
剩余的字符存储在comment
组中。