怎么写正则表达式,来匹配字符串中 重复n次的不确定字符

时间:2021-09-30 05:45:21
比如说 有字符串  aaaabbbdddddddccc12891384uuuuiii

假如说我要匹配找到字符串中某个字母(同一字母)重复4次子串,上面就应该有 aaaa, uuuu 两个,dddd 不算(因为重复次数多于4次)

除了 ([a-z])\1\1\1 再加上前后断言这种写法,还有没有更简洁明确的写法,因为这个重复次数是不能提前确定的

4 个解决方案

#1


[a-z]*  //重复>0
或 
[a-z]+  //重复>=0

#2


[a-zA-Z]{4}

#3



<?php
$str = 'aaaabbbdddddddccc12891384uuuuiii';
preg_match_all("/([a-zA-Z])\\1{3,}/s", $str, $matches);
var_export($matches);
/**
 * array (
  0 =>
  array (
    0 => 'aaaa',
    1 => 'ddddddd',
    2 => 'uuuu',
  ),
  1 =>
  array (
    0 => 'a',
    1 => 'd',
    2 => 'u',
  ),
)
 */
?>


还有~ 1 楼说反了~囧~

#4


引用 3 楼 SysTem128 的回复:
PHP code
<?php
$str = 'aaaabbbdddddddccc12891384uuuuiii';
preg_match_all("/([a-zA-Z])\\1{3,}/s", $str, $matches);
var_export($matches);
/**
 * array (
  0 =>
  array (
    0 => 'aaaa',
    1 => 'ddddddd',
    2 => 'uuuu',
  ),
  1 =>
  array (
    0 => 'a',
    1 => 'd',
    2 => 'u',
  ),
)
 */
?>




还有~ 1 楼说反了~囧~


谢谢。我才知道原来逆向引用也是可以用量词的。给分!

#1


[a-z]*  //重复>0
或 
[a-z]+  //重复>=0

#2


[a-zA-Z]{4}

#3



<?php
$str = 'aaaabbbdddddddccc12891384uuuuiii';
preg_match_all("/([a-zA-Z])\\1{3,}/s", $str, $matches);
var_export($matches);
/**
 * array (
  0 =>
  array (
    0 => 'aaaa',
    1 => 'ddddddd',
    2 => 'uuuu',
  ),
  1 =>
  array (
    0 => 'a',
    1 => 'd',
    2 => 'u',
  ),
)
 */
?>


还有~ 1 楼说反了~囧~

#4


引用 3 楼 SysTem128 的回复:
PHP code
<?php
$str = 'aaaabbbdddddddccc12891384uuuuiii';
preg_match_all("/([a-zA-Z])\\1{3,}/s", $str, $matches);
var_export($matches);
/**
 * array (
  0 =>
  array (
    0 => 'aaaa',
    1 => 'ddddddd',
    2 => 'uuuu',
  ),
  1 =>
  array (
    0 => 'a',
    1 => 'd',
    2 => 'u',
  ),
)
 */
?>




还有~ 1 楼说反了~囧~


谢谢。我才知道原来逆向引用也是可以用量词的。给分!