我正在尝试查找带有id和文本的所有标签,但我的正则表达式似乎不起作用:
使用以下正则表达式:
<asp:[a-z]+.*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/>
以及以下示例文本:
<asp:Label ID="SomeID" Text="SomeText" />
<asp:Label Text="SomeText" />
<asp:Label ID="SomeID" />
<asp:Label ID="SomeOtherID" Text="Some Other Text" />
我得到以下比赛:
1. "<asp:Label ID="SomeID" Text="SomeText" />" has 2 groups:
1. "SomeID"
2. "SomeText"
2. "<asp:Label Text="SomeText" /> <asp:Label ID="SomeID" /> <asp:Label ID="SomeOtherID" Text="Some Other Text" />" has 2 groups:
1. "SomeID"
2. "Some Other Text"
第一个显然是正确的,但我不确定为什么会出现#2。
以下正则表达式只找到第一个标签(“SomeID”)而不是第四个标签(“SomeOtherID”):
<asp:[a-z]+ (?!.*<[a-z]).*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/>
答案 0 :(得分:2)
尝试使用.*
替换表达式中的[^>]*
,以避免跨越HTML标记边界。问题是表达式中间的.*?
与/> <asp:Label ID="SomeOtherID"
匹配。
也许是这样的:
<asp:[a-z]+\s*ID="(?<id>[^"]*)"\s*Text="(?<text>[^"]*)"[^/]*/>