2012-02-06 105 views
-1

我有一個簡單的HTML字符串。從該字符串中,我想提取兩個HTML標籤之間的內容。提取兩個標籤之間的內容

我的源字符串是這樣的:

"Hello <b>world</b> test" 

我想解壓: 「世界」

我該怎麼辦呢?

+1

在什麼語言? – Kyle 2012-02-06 20:14:02

+1

我們需要知道你使用這個正則表達式的語言。正則表達式用於識別文本。此外,你的例子與你的實際問題沒有任何關係。看到這個問題關於HTML提取http://stackoverflow.com/a/1732454/1178921 – deltree 2012-02-06 20:17:45

+0

在這裏的權威答案:http://stackoverflow.com/a/1732454/85371 – sehe 2012-02-06 20:21:54

回答

-1

儘管在極其簡單的情況下這可能是可能的,但我強烈建議不要這樣做。 Regexp功能不足以解析HTML。使用適當的HTML解析庫。

-1

我不知道你使用的是什麼語言,這是一個VB.NET例子:「(。*)你好測試」

模式將

和Regex.Matches功能將採取您的輸入和模式,並返回一組匹配。每個比賽將包含組,組0將是整個比賽:「你好世界測試」和組1將是組內的文本:「世界」

System.Text.RegularExpressions.Regex.Matches(「hello world (0).Groups(1)

而像Dervall說Regex可能沒有足夠強大的功能來執行你想要做的事情,而且你可能需要重新修改與HTML一起工作的模式,如使空白(空格,製表符和新行)可選爲1例子。

+0

檢查編輯 - 標籤已經因爲格式不正確。 – 2012-02-06 20:38:27

3

假設你不是說任何標籤,但是具體的標籤(在這種情況下<b>),並假設你的HTML結構完好,因此不包含嵌套<b>標籤:

(?s)<b[^>]*>((?:(?!</b>).)*)</b> 

結果將是在組號1

說明:

(?s)  # Allow the dot to match newlines (hope you're not using JavaScript) 
<b[^>]*> # Match opening <b> tag 
(   # Capture the following: 
(?:  # Match (and don't capture)... 
    (?!  # (as long as we're not at the start of 
    </b> # the string </b> 
)  # ) 
    .  # any character. 
)*  # Repeat any number of times 
)   # End of capturing group. 
</b>  # Match closing </b> tag 
-1

我會使用下面的表達式來驗證結束標記是否與開始標記匹配。

(?<=<(b)>)[^>]+(?=</\1>) 

更多的 「消化」 的例子是:

(?<=<(b)>)[^>]+(?=</b>)