具有两个连续(相同或不相同)匹配的正则表达式

时间:2016-06-14 19:50:35

标签: php regex

我已经为PHP正则表达式函数编写了这个正则表达式:

\[\[.*?\]\]

这匹配双方括号之间的单词或短语。我现在想要找到的是一个匹配两个或多个连续(相同或不相同)匹配的正则表达式。我试过

(\[\[.*?\]\]){2,}

并使用此解决方法:Regular Expression For Consecutive Duplicate Words。但是,它们都没有奏效。有没有人有更好的主意?

我想要匹配的是,例如[one][two][three]。正则表达式的第一部分将匹配[one],我试图获取整个短语[one][two][three]

谢谢!

1 个答案:

答案 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]