单个和多个结束标记的属性内容

时间:2014-02-05 23:16:31

标签: regex

如何跨文件

获取以下标记的value属性中的内容
<h:graphicImage .... value="*1.png*" ...../>
<h:graphicImage .... value="*2.png*" ....>...</h:graphicImage>

我的正则表达式搜索结果应该导致

  • 1.png
  • 2.png

我能找到的只是多个结束标签的内容,但单个结束标签呢。

1 个答案:

答案 0 :(得分:1)

使用XML解析器,正则表达式无法正确解析XML,除非您知道输入将始终遵循特定的表单。

但是,这里有一个正则表达式,您可以使用它来提取h:graphicImage标签的value属性,但请阅读以下警告:

<h:graphicImage[^>]+value="\*(.*?)\*"

并且1.png2.png将位于第一个捕获的组中。

注意事项:

  • 在这里,我假设您的1.png2.png等始终被星号包围,就像您的问题所显示的那样(这就是\*的用途)
  • 如果其中一个属性具有“&gt;”,则此正则表达式将失败其中的字符,例如

    <h:graphicImage foo=">" value="*1.png*"
    

    这就是我之前提到的关于正则表达式永远无法正确解析XML的问题。 您可以通过调整正则表达式来解决这个问题:

    <h:graphicImage.+?+value="\*(.*?)\*"
    

    但这意味着,如果您有<h:graphicImage /><foo value="*1.png*">,那么当您只想从1.png标记中提取时,会提取foo标记中的graphicImage。 同样,正则表达式总是会出现针对XML的极端情况的问题,因此您需要根据您的应用程序进行调整(例如,如果您知道,则iconImage标记将永远有一个“值”属性,那么第二种情况可能比第一种情况要好。