【发布时间】:2016-11-09 08:59:20
【问题描述】:
我想匹配这个类似 html 的模式:<12>Some content with \n in it<12>
重要的是只标记完整的项目(数字必须匹配),这意味着当缺少一个标签时,不应标记内容。 <12>Some content with \n in it<13>test<13>
这是我目前得到的:
(<\s*[0-9]+\>)(.*?[^<]*?)(<\s*[0-9]+\>)
这是我期望它应该起作用但实际上它没有:
(<\s*[0-9]+\>)(.*?[^<]*?)(<\s*[0-9]+\>)\1
我尝试使用此编辑器,但反向引用没有按预期工作。为什么对第一个捕获组的反向引用不起作用?该解决方案应该在 C++ 中运行。
【问题讨论】:
-
在你使用它的地方显示代码。顺便说一句,您使用第二个
<\s*[0-9]+>的标签。试试(<\s*[0-9]+>)([^<]*)\1,见this demo。 -
C 和 C++ 不是同一种语言。
-
您使用 C 还是 C++ 工作?答案是非常、非常、完全不同的。 C++在标准库中有正则表达式; C 没有。如果您使用 C 进行编程,那么问题就变成了“您使用的是哪个正则表达式包”。如果您使用 C++ 编程,那真的不是问题。您正在使用
<regex>,除非有相反的特殊要求(如果存在,应在问题中明确说明)。 -
我已经调整了问题。我需要它用于 C++。还没有代码,因为我想在实现之前检查我的想法是否有效!
-
你为什么使用
\s*?可以有< 1> text < 1>吗?如果是的话,可以有<1> text < 1 >吗?
标签: c++ regex tags backreference