递归正则表达式,如何将耦合字符串与正则表达式匹配?

时间:2010-01-13 12:04:41

标签: regex recursion

  

... AA BB sysodufsoufdds BB AA ...

AABB可以是任意连续的字符串,其中没有空格。

但我希望得到 outest对AA

更多例子:

输入:

  

a HH CC abc CC HH c

输出:

  

HH

输入:

  

x YYYY j DD GG DD hsu DD GG DD k YYYY o

输出:

  

YYYY

为了使我的问题更加通用,如何将html中的特定标签与正则表达式进行匹配?我已经看过各种帖子讨论这个问题,但是他们都没有给出正则表达式的答案。相关问题是: I'm looking for a regular expression to remove a given (x)HTML tag from a string

2 个答案:

答案 0 :(得分:1)

\b(\w{2,})\b.*\b\1\b

将匹配从第一系列连续字符到重复的所有内容。反向引用\1将包含匹配的模式(例如,示例中的AA,HH或YYYY)。

\b是强制字边界所必需的。

编辑:哦。我刚刚注意到你想要完全做其他事情,即从字符串/文件中删除HTML标记。 使用正则表达式。当有人问这样的问题时,我不会引用其他人总是引用的文章,但问题(简而言之)是HTML不规则,并且尝试在这里使用正则表达式只是在寻找麻烦。这就是为什么没有人(正确的思想)使用正则表达式“解析”HTML的原因 - 他们使用解析器。

那就是说,我已经使用正则表达式来从格式良好的XML源中提取数据,在那里我完全了解结构,并且知道我感兴趣的标签永远不会嵌套等等 - 但是正则表达式的递归只是非常复杂,如果它可以工作(C#和Perl有一些支持,但它非常多毛。)

答案 1 :(得分:0)

我认为你需要在这里提及。像(试图避免任何正则表达式语言的细节):

(\w+) \w* (\w+) \w+ \1 \w* \2

第一次捕获是你的结果。

我假设单个空格分隔字符串以使其更清晰,您可能需要允许\s+的任意空格,\w(标识符字符:大致[a-zA-Z9-0_])是正确匹配字符串。