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

Regex non-greedy named capturing groups

我需要解析下面的文本并读取 id 和 name 的值,name 是可选的。我得到 'txt" name="thistext' 作为 id 的值。

input 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 "

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

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

Demo

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

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

Demo for better regex