正则表达式匹配标签内的特定文本

时间:2014-10-30 20:59:40

标签: xml regex match

我有一个XML文档,如果其中包含sometextv2,我会尝试匹配完整标记。这是我正在使用的示例数据集:

<mm_reportitem>
    <mm_file>file.cfm</mm_file>
    <mm_displaystr><![CDATA[ <cfinvoke component="/sometextv2" ]]></mm_displaystr>
</mm_reportitem>
<mm_reportitem>
    <mm_file>file.cfm</mm_file>
    <mm_displaystr><![CDATA[ <cfinvoke component = "/sometext" ]]></mm_displaystr>
</mm_reportitem>
<mm_reportitem>
    <mm_file>file.cfm</mm_file>
    <mm_displaystr><![CDATA[ <cfinvoke component="sometextv2" ]]></mm_displaystr>
</mm_reportitem>

我正在处理以下几个来自不同来源的文章:

<mm_reportitem[^>]*>([\s\S]*?).*sometextv2.*([\s\S]*?)<\/mm_reportitem>

这与我想要的完整标签相匹配。但是,这似乎与sometextsometextv2匹配。

我缺少什么,只有sometextv2匹配?

2 个答案:

答案 0 :(得分:0)

尝试:

<mm_reportitem>[\s\S]{10,200}sometextv2\"[\s\S]*?<\/mm_reportitem>

我只需添加{10,150}以避免在一个结果中出现多个mm_reportitem。我认为在这个奇怪的案例中,正则表达式太“贪婪”是个问题......

答案 1 :(得分:-1)

你的正则表达式对我来说太复杂了。

<tag.*sometextv2.*</tag>

适用于您发布的所有示例。这对你有用吗?