Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 提取两个标记之间的内容_Regex - Fatal编程技术网

Regex 提取两个标记之间的内容

Regex 提取两个标记之间的内容,regex,Regex,我有一个简单的HTML字符串。我想从这个字符串中提取两个HTML标记之间的内容 我的源字符串是: "Hello <b>world</b> test" “你好世界测试” 我想摘录:“世界” 我该怎么做呢?虽然这在非常简单的环境中是可能的,但我强烈建议不要这样做。Regexp不够强大,无法解析HTML。使用适当的HTML解析库。我不知道您使用的是什么语言,这是一个VB.NET示例: 模式将是“hello(.*)test” 而Regex.Matches函数将接受您的输入和模

我有一个简单的HTML字符串。我想从这个字符串中提取两个HTML标记之间的内容

我的源字符串是:

"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提取的问题此处的最终答案:检查编辑-标记因格式错误而丢失。