2012-02-06 108 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>)