2017-01-12 64 views
3

人前說,我知道我應該使用合適解析器,但爲我用的情況下,最好是使用正則表達式。html標籤之外匹配文本

我有以下的正則表達式,試圖匹配文本html標籤之外:

(?<!<[^>]*)(?<Text>.+?) 

然而,這似乎是相匹配的標籤的開括號,即<。我怎樣才能解決這個問題?

例輸入:

<span style="color:blue">some <strong>bold</strong> text</span> 

預計:

some bold text 

了:

<some <bold< text< 

Link to RegexStorm.

回答

4

的問題是,你正在使用.的任何字符匹配。與否定字符類取代它,像[^<>]任何字符匹配但<>並使用貪婪量詞*(以匹配0或多次出現)或+(以匹配1個或多個):

(?<!<[^>]*)(?<Text>[^<>]*) 

參見regex demo

順便說一句,在該圖案的端部使用(?<Text>.+?)僅使正則表達式引擎匹配1個炭由於+?是惰性限定符匹配1個或多個,但儘可能少(並且由於1 enoug h時,它總是會匹配只有1個字符)。通常情況下,必須有這樣一個懶洋洋地量化一個後一些其他模式,否則,它通常不會獲取正確的文本。