正则表达式自定义匹配标签并获取其组?

Regex custom matched tag ang get its group?

我正在尝试创建自定义标记。这个标记看起来像这样;如果没有属性那么它将是 <mark text mark> 并且这个匹配的组将是文本。如果这个标记有一个属性 <mark:attribute text mark> 就会像这样。在 <mark 之后会有一个没有 space 的冒号,并且会有一个没有 space 的属性。此次匹配会形成两组,第一组是冒号后的属性值,第二组是文本。

例子

<mark
text
mark>

必须匹配

<mark:attribute
text
mark>

必须匹配



我认为当 mark 大写时会使匹配变得困难 <MARK TEXT MARK>。不影响情况也无所谓

总结

我尝试编写一些正则表达式 (<mark:([^*].+?)mark>) 但我无法得到任何结果。我希望我能够解释。 https://regex101.com/r/jNsM88/1

感谢您的帮助。

第 0 组始终是 整个 匹配项,因此捕获的组从 1 开始:您的目标将被捕获到第 1 组和第 2 组(而不是您想要的 0 和 1)。

为属性使用可选(即量词?)非捕获组((?:...))并捕获非空白\S:

<mark(?::(\S+))?\s+(\S+)\s+mark>

live demo