2014-10-30 49 views
-1

我有一個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獲得匹配?

回答

0

與嘗試:

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

我只是添加{} 10150,以避免在一個結果不止一個mm_reportitem。我認爲這是一個正則表達式在這種奇怪的情況下太「貪婪」的問題...

+0

我能夠修改這個以允許'mm_reportitem'節點中的屬性,並使其完美工作。謝謝! – 2014-10-31 13:30:34

-1

你的正則表達式對我來說太複雜了。

<tag.*sometextv2.*</tag> 

適用於您發佈的所有示例。那對你有用嗎?

+0

我能夠提供我正在使用的實際數據集。請看原文。我嘗試了你的建議,但它不匹配。也許是由於標籤內缺少新的線條? – 2014-10-30 21:12:20

+0

只需將它們加入即可... \ n。* \ n。* sometextv2。* \ n 從這裏您可以根據需要使其更加嚴格或鬆懈。 – 2014-10-30 21:27:08

+0

按照你的例子,我在這裏創建了一個測試用例。然而,我仍然沒有得到匹配:http://regexr.com/39qt0 此外,在'',3,4等內可能有2個新行。它不是全部一致,所以明確定義新的在這種情況下,表達式中的行可能不可靠。 – 2014-10-30 21:35:49