正则表达式 - 恰好匹配一个标签

3 html regex

我有一个正则表达式从HTML字体标记中提取文本:

<FONT FACE=\"Excelsior LT Std Bold\"(.*)>(.*)</FONT>
Run Code Online (Sandbox Code Playgroud)

这个工作正常,直到我有一些嵌套的字体标签.而不是匹配

<FONT FACE="Excelsior LT Std Bold">Fett</FONT>
Run Code Online (Sandbox Code Playgroud)

字符串的结果

<FONT FACE="Excelsior LT Std Bold">Fett</FONT> + <U>Unterstrichen</U> + <FONT FACE="Excelsior LT Std Italic">Kursiv</FONT> und Normal
Run Code Online (Sandbox Code Playgroud)

是

<FONT FACE="Excelsior LT Std Bold">Fett</FONT> + <U>Unterstrichen</U> + <FONT FACE="Excelsior LT Std Italic"
Run Code Online (Sandbox Code Playgroud)

我如何只获得第一个标签?

Dan*_*ner 10

你需要取消贪婪的匹配.*?而不是.*.

<FONT FACE=\"Excelsior LT Std Bold\"([^>]*)>(.*?)</FONT>
Run Code Online (Sandbox Code Playgroud)

请注意,如果在标记BadAttribute="<FooBar>"的FACE属性之后存在某个属性,则此操作将失败<FONT>.这将混合两个匹配组,如果属性包含,它可能会完全混乱</FONT>.没有办法解决这个问题,因为正则表达式无法计算匹配的标签或引号.所以我绝对同意Tomalak - 尽量避免使用正则表达式来处理XML,HTML和其他类似的标记语言.