我已经为PHP正则表达式函数编写了这个正则表达式:
\[\[.*?\]\]
这匹配双方括号之间的单词或短语。我现在想要找到的是一个匹配两个或多个连续(相同或不相同)匹配的正则表达式。我试过
(\[\[.*?\]\]){2,}
并使用此解决方法:Regular Expression For Consecutive Duplicate Words。但是,它们都没有奏效。有没有人有更好的主意?
我想要匹配的是,例如[one][two][three]
。正则表达式的第一部分将匹配[one]
,我试图获取整个短语[one][two][three]
。
谢谢!
答案 0 :(得分:1)
如果从第二个图案的两侧移除1个支架,它将已经可以使用。见(\[.*?\]){2,}
。
更优雅的解决方案是(?:\[[^][]*]){2,}
。在此处,\[
与[
匹配,[^][]*
将匹配除]
以外的零个或多个字符,[
和]
将匹配结尾字面值]
。
如果要将第一个[one]
捕获到第1组,请使用(\[[^][]*])(?1)+
。在这里,(?1)
重新使用第1组子模式(即\[[^][]*]
)。
这是PHP demo:
$re = '~(?:\[[^][]*]){2,}~';
$str = "[one][two][three]";
preg_match($re, $str, $matches);
print_r($matches[0]); // => [one][two][three]