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

Regex 递归正则表达式,如何将耦合字符串与正则表达式匹配?,regex,recursion,Regex,Recursion,。。。AA BB Sysodufsoufds BB AA 其中,AA,BB可以是无空格的任意连续字符串 但是我想得到最外面的一对:AA 更多示例: 输入: a HH-CC-abc-CC-HH-c 输出: 嗯 输入: x YYYY j DD GG DD hsu DD GG DD k YYYY o 输出: YYYY 为了让我的问题更一般,如何将html中的特定标记与正则表达式相匹配?我已经看到了各种讨论这一点的帖子,但没有一篇文章给出regex的答案。相关问题有: 我想你需要在这里找到参考资料。类似

。。。AA BB Sysodufsoufds BB AA

其中,
AA
BB
可以是无空格的任意连续字符串

但是我想得到最外面的一对:
AA

更多示例:

输入:

a HH-CC-abc-CC-HH-c

输出:

输入:

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

输出:

YYYY


为了让我的问题更一般,如何将html中的特定标记与正则表达式相匹配?我已经看到了各种讨论这一点的帖子,但没有一篇文章给出regex的答案。相关问题有:

我想你需要在这里找到参考资料。类似(试图避免任何正则表达式语言的细节):

第一个捕获就是你的结果

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

\b(\w{2,})\b.*\b\1\b
将匹配从第一个连续字符序列到其重复的所有字符。反向引用
\1
将包含匹配的模式(例如示例中的AA、HH或YYYY)

\b
s是强制执行单词边界所必需的

编辑:哦。我刚刚注意到,您需要完全执行其他操作,即从字符串/文件中删除HTML标记不要为此使用正则表达式。当有人问这样的问题时,我不会引用其他人总是引用的文章,但问题(简而言之)是HTML不是规则的,在这里尝试使用正则表达式只是自找麻烦。这就是为什么没有人(在他们正常的头脑中)使用正则表达式来“解析”HTML的原因——他们使用解析器


这就是说,我使用正则表达式从格式良好的XML源中提取数据,在这些XML源中,我确切地知道结构,并且知道我感兴趣的标记永远不会嵌套,等等。但是正则表达式的递归如果真的能工作的话,就非常复杂了(C#和Perl对此有一些支持,但它令人难以置信地毛茸茸的)。

对于输入:“x YYYY DD GG hsu GG DD YYYY”,YYYY是有效答案吗?第二个示例没有遵循您开始时的模式。第二个示例是
AA str1 BB str2 BB str3 AA
(即,成对字符串之间的空格多于空格)。对于您提供的示例,输出为
AA
,以使我的问题更一般化,即如何将html中的特定标记与正则表达式匹配?我看过各种帖子讨论这一点,但没有一篇文章给出regex的答案。相关问题是:一般来说,regex是错误的方法,除非上下文受到实质性限制(例如,您控制源代码)。最好使用解析器(如果您知道它是XHTML,那么它可能是XML解析器)。假设我处理的是类似html的东西,但不完全是html。那么DOM解析器将无法工作。+1是一个很好的答案,衷心感谢您没有链接到Rant。
\b(\w{2,})\b.*\b\1\b