2014-09-29 14 views
0

我使用JavaScript正則表達式/(<mos>[\s\S]*?<\/mos>)/g找到看起來大致是這樣的一個日誌文件,XML塊:正則表達式找到最小可能的匹配

Entry 1: <mos>...</mos> 
Entry 2: <mos>...</mos> 

然而,有時記錄過程中遇到錯誤和沒有寫完一個條目的文件,在這種情況下,它看起來像這樣:

Entry 1: <mos>Error! 
Entry 2: <mos>...</mos> 

當這種情況發生的正則表達式從開<mos>標籤第1項相匹配的一切收盤</mos>條目2中的標記,稍後處理XML時會導致問題。

看來,不知何故首先匹配閉合標籤,然後回顧他們相應的開放標籤將避免這種情況,但我不知道如何做到這一點,或者如果可能與正則表達式。


澄清:在由開始和結束標籤界定可包括換行塊的...

+0

爲什麼要在'[\ s \ S] *'上匹配'什麼時候你想要的是'一切到'<或'\ n'「? – 2014-09-29 14:59:00

+0

「您無法使用正則表達式解析[X] HTML ......」或XML:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-標籤/ 1732454#1732454 – 2014-09-29 15:01:11

+0

@ Mike'Pomax'Kamermans條目中的'...'可以跨越多行。我已經更新了我的問題以包含該問題。 – Alex 2014-09-29 15:39:37

回答

2

這應該滿足您的需求:

<mos>((?:[\s\S](?!<mos>))+?)</mos> 

Regular expression visualization

可視化的Debuggex

演示上RegExr


不要忘記逃跑的斜線,如果使用一個JS正則表達式精簡版拉爾。

+0

看起來很棒!謝謝! – Alex 2014-09-29 17:45:29