正则表达式匹配类似的模式字符串,但我需要最后一次出现

时间:2017-11-22 00:34:08

标签: regex

我有以下文字

">UNWANTEDTEXT">APRODUCT</ProductCode>

我正在构建一个正则表达式语句,我希望的结果是文本

APRODUCT

我现在的正则表达式就是这个。

">(.*?)<\/ProductCode>

我面临的问题是,“&gt; 的相同文本模式在开始时出现...我需要一种方法来告诉正则表达式只查看最后一次出现的“&GT;然后在它与 </ProductCode>

之间拉取值

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是指出您要匹配的字符而不是任何字符,即任何不是结束尖括号的字符:

([^>]*)<\/ProductCode>

如果字符串可以包含一个结束尖括号,如果它前面没有引号,那么解决方案就会变得更加毛躁。假设您的正则表达式库支持零宽度断言:

(?:">)?((?:(?!">).)*)<\/ProductCode>

希望这有帮助!

我还想补充一点,如果您正在解析SGML,您可能会考虑使用专用于此目的的库,而不是尝试基于正则表达式拼凑您自己的解析器。该路径为fraught with peril