Regex 提取两个标记之间的内容
我有一个简单的HTML字符串。我想从这个字符串中提取两个HTML标记之间的内容 我的源字符串是:Regex 提取两个标记之间的内容,regex,Regex,我有一个简单的HTML字符串。我想从这个字符串中提取两个HTML标记之间的内容 我的源字符串是: "Hello <b>world</b> test" “你好世界测试” 我想摘录:“世界” 我该怎么做呢?虽然这在非常简单的环境中是可能的,但我强烈建议不要这样做。Regexp不够强大,无法解析HTML。使用适当的HTML解析库。我不知道您使用的是什么语言,这是一个VB.NET示例: 模式将是“hello(.*)test” 而Regex.Matches函数将接受您的输入和模
"Hello <b>world</b> test"
“你好世界测试”
我想摘录:“世界”
我该怎么做呢?虽然这在非常简单的环境中是可能的,但我强烈建议不要这样做。Regexp不够强大,无法解析HTML。使用适当的HTML解析库。我不知道您使用的是什么语言,这是一个VB.NET示例: 模式将是“hello(.*)test” 而Regex.Matches函数将接受您的输入和模式,并返回一组匹配项。每个匹配将包含组,组0将是整个匹配:“hello world test”,组1将是组内的文本:“world” System.Text.RegularExpressions.Regex.Matches(“hello世界测试”、“hello(+)测试”)。项(0)。组(1) 正如Dervall所说,Regex的功能可能不足以满足您的需要,您可能需要对模式进行大量修改才能使用HTML,例如将空白(空格、制表符和新行)作为可选的一个示例。假设您不是指任何标记,而是指特定的标记(在本例中为
),假设您的HTML格式良好,因此不包含嵌套的
标记:
(?s)<b[^>]*>((?:(?!</b>).)*)</b>
(?s)]*>((?:(?!))*)
结果将出现在第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
(?s)#允许点匹配换行符(希望您没有使用JavaScript)
]*>#匹配开头标签
(#捕获以下内容:
(?:#匹配(不要捕捉)。。。
)只要我们不是一开始就行
#弦
) # )
.#任何角色。
)*#重复任意次数
)#捕获组结束。
#比赛结束标记
我将使用以下表达式,该表达式还将验证结束标记是否与开始标记匹配
(?<=<(b)>)[^>]+(?=</\1>)
(?]+(?=)
一个更“容易理解”的例子是:
(?<=<(b)>)[^>]+(?=</b>)
(?]+(?=)
我们需要知道您在中使用此正则表达式的语言。正则表达式用于识别文本。此外,您的示例与您的实际问题无关。请参阅此关于html提取的问题此处的最终答案:检查编辑-标记因格式错误而丢失。