正则表达式匹配多次出现的相同模式

时间:2014-07-01 04:13:55

标签: regex

我正在尝试运行测试以查看具有多行的长字符串是否多次出现相同的模式,或者说是5次或10次出现。

这样的字符串如下:

$string = "this is a test pattern1 more of a test pattern1

and so on and so on pattern1";

所以在这种情况下我尝试使用PHP:

if (preg_match('/(pattern1)\1{2,}/m',$string)) print "Found 2+ occurences of pattern1\n";

但是这不起作用。

我无法使用preg_match_all

有人可以纠正我的正则表达吗?

4 个答案:

答案 0 :(得分:1)

如果我理解得很好,你就不会有好的模式(这里有三次出现)

/(pattern1)(?:.*?\1){2,}/s

其中s修饰符允许点匹配换行符。

答案 1 :(得分:1)

您可以使用以下内容..

if (preg_match('/(pattern1)(?:((?!\1).)*\1){2,}/s', $string)) {

Working Demo

答案 2 :(得分:1)

检查此模式

/(pattern1)/g

g - 修饰符查找所有匹配项而不是返回第一个匹配项。

答案 3 :(得分:0)

为什么不使用preg_match_all搜索单词/模式并计算出现次数:

<?php
$message="this is a test pattern1 more of a test pattern1 and one more pattern1";
echo preg_match_all('/pattern1/i', $message, $matches);

将返回3

或者更确切地说是你的情况:

<?php
$message="this is a test pattern1 more of a test pattern1 and one more pattern1";
if(preg_match_all('/pattern1/i', $message, $matches) >= 2 ) print "Found 2+ occurences of pattern1\n";