为什么我会使用此模式获得空匹配?

时间:2017-11-08 02:20:12

标签: c# regex balanced-groups

http://regexstorm.net/tester我使用以下模式:

(?:(?!\(|\)|\,).)*(?:(?:(?'open'\()(?:(?!\(|\)).)*)+((?'content-open'\))(?:(?!\(|\)|\,).)*)+)*(?(open)(?!))

以下值:

(asi(de, fghdfh(fghjgh))),(dfgsdg)
rtyerty,
dhggjkmf,
bnmvbm,
cvbngfh,
iopuip

对我来说,每一场比赛都是空的。如果您将第一个*切换为+,它可以正常工作,但我需要它是*,因为在平衡之前不必有任何字符 - 组。我知道我可以忽略空的比赛,但这对我来说很烦人,我想知道我的模式是否有问题?

是否有匹配的特定字符或锚点,我可以使用[^...]组而不是初始.

1 个答案:

答案 0 :(得分:0)

我认为你会遇到重叠的替补比赛: 我试图简化模式。我不完全在那里(我希望我没有删除太多)但这应该是一个改进:

(?:[^(),])*(?:(?:(?<open>\()(?:[^()])*)+|((?<content-open>\))(?:[^(),])*))*

无论哪种方式,如果你的模式符合你想要的模式。