正则表达式非贪婪命名捕获组

时间:2018-12-19 01:43:13

标签: regex capturing-group

我需要解析以下文本并读取id和name的值,并且 name是可选的。我正在获取“ txt” name =“ thistext”作为id的值。

  

输入id =“ txt” name =“ thistext”

这是我正在使用的正则表达式-

  

input\s+id="(?<id>.*)("+?)(?:(\s+name="(?<name>.*)(.*?")))?

完全匹配0-30 input id="txt" name="thistext"id 10-29 txt" name="thistext 第2组。29-30"

1 个答案:

答案 0 :(得分:1)

您的正则表达式几乎是正确的,除了,您需要在您的id命名组中进行非贪婪捕获,并将您的正则表达式更改为此,

input\s+id="(?<id>.*?)("+?)(?:(\s+name="(?<name>.*)(.*?")))?

Demo

此外,您的正则表达式过于复杂,可以这样简化,

input\s+id="(?<id>[^"]*)"(?:\s+name="(?<name>[^"]*)")?

Demo for better regex