一、不多说。直接上代码
-
说明:
\x{4e00}-\x{9fa5}
为汉字的范围。 -
把正则中的第一个
1
改成2
;注意区别。
//叠词(重复连续出现的词)
public function repeatWords()
{
//定义内容数据
$content = "艾希你你好啊,你好好啊,你真的明明好啊,眼睛亮晶晶的,请别走走停停,休息一下说道说道,漂亮的梳妆匣梳妆匣梳妆匣送给你,如沐春风如沐春风";
//大概的格式有这几种:AAB、ABB、AABC、ABCC、AABB、ABAB、ABCABC、ABCDABCD、...以此类推...ABCDEABCDEABCDE
//其中:AAB、ABB、AABC、ABCC、AABB 的相同点是都有2个一样的词
//ABAB、ABCABC、ABCDABCD、ABCDEABCDEABCDE 是由 N (大于等于2)个词语重复出现
//由此可以得到正则
$pattern = '/([\x{4e00}-\x{9fa5}]{1,})(\\1)/u';
$this->printResult($pattern, $content);
//把正则中的第一个1改成2;注意区别
$pattern = '/([\x{4e00}-\x{9fa5}]{2,})(\\1)/u';
$this->printResult($pattern, $content);
}
/**
* 打印结果
* @param string $pattern 正则表达式
* @param string $content 需要匹配的内容
* @return void
*/
public function printResult($pattern, $content)
{
preg_match_all($pattern, $content, $result);
echo <<<EOF
正则 --- [ {
$pattern} ]
内容:{
$content}
结果:
EOF;
var_export($result);
echo "\n---------------------------------------------------\n\n";
}
二、打印(查看源代码)
正则 --- [ /([\x{
4e00}-\x{
9fa5}]{
1,})(\1)/u ]
内容:艾希你你好啊,你好好啊,你真的明明好啊,眼睛亮晶晶的,请别走走停停,休息一下说道说道,漂亮的梳妆匣梳妆匣梳妆匣送给你,如沐春风如沐春风
结果:array (
0 =>
array (
0 => '你你',
1 => '好好',
2 => '明明',
3 => '晶晶',
4 => '走走',
5 => '停停',
6 => '说道说道',
7 => '梳妆匣梳妆匣',
8 => '如沐春风如沐春风',
),
1 =>
array (
0 => '你',
1 => '好',
2 => '明',
3 => '晶',
4 => '走',
5 => '停',
6 => '说道',
7 => '梳妆匣',
8 => '如沐春风',
),
2 =>
array (
0 => '你',
1 => '好',
2 => '明',
3 => '晶',
4 => '走',
5 => '停',
6 => '说道',
7 => '梳妆匣',
8 => '如沐春风',
),
)
---------------------------------------------------
正则 --- [ /([\x{
4e00}-\x{
9fa5}]{
2,})(\1)/u ]
内容:艾希你你好啊,你好好啊,你真的明明好啊,眼睛亮晶晶的,请别走走停停,休息一下说道说道,漂亮的梳妆匣梳妆匣梳妆匣送给你,如沐春风如沐春风
结果:array (
0 =>
array (
0 => '说道说道',
1 => '梳妆匣梳妆匣',
2 => '如沐春风如沐春风',
),
1 =>
array (
0 => '说道',
1 => '梳妆匣',
2 => '如沐春风',
),
2 =>
array (
0 => '说道',
1 => '梳妆匣',
2 => '如沐春风',
),
)
---------------------------------------------------