标题可能令人困惑,但我不知道如何正确地说出这一点。
所以这是我的目标。我有这个字符串(或类似的东西):
[some_element]Random string chars [some_element]Ramdon[/some_element] some more random chars[/some_element]
(有些人可能会认识到这些是WordPress的短代码,但这种方法在我的其他地方仍然有用。)
我需要做的是匹配父“元素”。我通常的做法可能是这样的:
\[(\w+)].*?\[\/\1]
问题是,这在上面的示例中不起作用,因为它的“子元素”具有相同的结束“标记”。
我怎么能让这个正则表达式工作,无论有多少嵌套子项存在(字面意思是,无数个重复的嵌套子元素)?
答案 0 :(得分:1)
这看起来像是recursive patterns (in php)的工作
但遗憾的是,在没有尝试的情况下,在这里编写模式的方式太缺乏经验:(
也许你可以自己解决这个问题。我也会尝试一下,但这需要一段时间......
({[<和>]}之间的单词不是模式的一部分,它们描述了子模式应该做什么。)
[(([[<某种方式来匹配除[word]>]之外的任何字符串})|(?R))*]
答案 1 :(得分:1)
您可以使用此recursive regex in PHP:
$re = '~\s* ( \[some_element\] ( (?: .* | (?1) )* ) \[/some_element\] )~x';
这将在匹配的组#2中为您提供此字符串:
Random string chars [some_element]Ramdon[/some_element] some more random chars