如何跨文件
获取以下标记的value属性中的内容<h:graphicImage .... value="*1.png*" ...../>
<h:graphicImage .... value="*2.png*" ....>...</h:graphicImage>
我的正则表达式搜索结果应该导致
我能找到的只是多个结束标签的内容,但单个结束标签呢。
答案 0 :(得分:1)
使用XML解析器,正则表达式无法正确解析XML,除非您知道输入将始终遵循特定的表单。
但是,这里有一个正则表达式,您可以使用它来提取h:graphicImage
标签的value属性,但请阅读以下警告:
<h:graphicImage[^>]+value="\*(.*?)\*"
并且1.png
或2.png
将位于第一个捕获的组中。
注意事项:
1.png
,2.png
等始终被星号包围,就像您的问题所显示的那样(这就是\*
的用途)如果其中一个属性具有“&gt;”,则此正则表达式将失败其中的字符,例如
<h:graphicImage foo=">" value="*1.png*"
这就是我之前提到的关于正则表达式永远无法正确解析XML的问题。 您可以通过调整正则表达式来解决这个问题:
<h:graphicImage.+?+value="\*(.*?)\*"
但这意味着,如果您有<h:graphicImage /><foo value="*1.png*">
,那么当您只想从1.png
标记中提取时,会提取foo
标记中的graphicImage
。
同样,正则表达式总是会出现针对XML的极端情况的问题,因此您需要根据您的应用程序进行调整(例如,如果您知道仅,则iconImage标记将永远有一个“值”属性,那么第二种情况可能比第一种情况要好。