在PHP中捕获重复字母 - 正则表达式

时间:2011-10-25 12:42:33

标签: php regex character repeat

我必须检查用户输入以确保正确输入名称,姓氏(等等)并且有效。我必须构建一个regexp来检查用户是否输入了名字,姓氏等重复的字母......

示例:

  • AAAron =因为3 A的错误
  • AAron = good
  • 汉娜=好
  • Hannnah =因为3 N的
  • 而不好

是否有PHP正则表达式来捕获这些情况? (我有一个基本的正则表达式知识,但这对我来说太过分了)

修改 这也应该允许数字:David 3或III

由于

2 个答案:

答案 0 :(得分:14)

您可以使用反向引用来实现此目的。

preg_match('/(\w)(\1+)/', $subject, $matches);
print_r($matches);

\1表示重复第一次捕获,因此\w

就你的例子而言,我认为使用正则表达式不是最佳解决方案,为什么不计算任何字符的实例数?

$charCountArray = array();
foreach ($name as $char) {
    $charCountArray[$char]++;
}

反向引用是一项高级功能,幸运的是PCRE功能支持它。

注意:preg_match只匹配一个序列,如果您需要知道所有匹配项,请使用preg_match_all

答案 1 :(得分:5)

试试这个正则表达式:

/(\w)\1{2}/