RegEx匹配包含重复项的父项

时间:2014-11-24 20:17:38

标签: php regex duplicates

标题可能令人困惑,但我不知道如何正确地说出这一点。

所以这是我的目标。我有这个字符串(或类似的东西):

[some_element]Random string chars [some_element]Ramdon[/some_element] some more random chars[/some_element]

(有些人可能会认识到这些是WordPress的短代码,但这种方法在我的其他地方仍然有用。)

我需要做的是匹配父“元素”。我通常的做法可能是这样的:

\[(\w+)].*?\[\/\1]

问题是,这在上面的示例中不起作用,因为它的“子元素”具有相同的结束“标记”。

我怎么能让这个正则表达式工作,无论有多少嵌套子项存在(字面意思是,无数个重复的嵌套子元素)?

2 个答案:

答案 0 :(得分:1)

这看起来像是recursive patterns (in php)的工作 但遗憾的是,在没有尝试的情况下,在这里编写模式的方式太缺乏经验:(
也许你可以自己解决这个问题。我也会尝试一下,但这需要一段时间......

你会看到那个:

({[<和>]}之间的单词不是模式的一部分,它们描述了子模式应该做什么。)

  

[(([[<某种方式来匹配除[word]>]之外的任何字符串})|(?R))*]

答案 1 :(得分:1)

您可以使用此recursive regex in PHP

$re = '~\s* ( \[some_element\] ( (?: .* | (?1) )* ) \[/some_element\] )~x';

RegEx Demo

这将在匹配的组#2中为您提供此字符串:

Random string chars [some_element]Ramdon[/some_element] some more random chars