验证单词是否在任何位置重复出现

时间:2011-08-09 17:43:18

标签: regex

我想知道是否有办法测试某个单词是否在任何位置重复出现?

我目前正在使用这个正则表达式来测试它,但不能正常工作,因为如果我添加更多的2,则测试返回true。

  /s{0,2}/.test('süuaãpérbrôséê'); //expected true
  /s{0,2}/.test('ssüuaãpérbrôéê'); //expected true
  /s{0,2}/.test('süuaãpérbrôéê'); //expected true
  /s{0,2}/.test('süuaãpérbrôséês'); //expected fail

感谢。

4 个答案:

答案 0 :(得分:2)

/s{2,}/

或通常用于任何角色:

/(.)\1/

答案 1 :(得分:0)

/(\w)\1/找到彼此相邻的两个字母数字字符

这将找到并替换重复项: s/(\w)\1/$1/

答案 2 :(得分:0)

我发现解决此问题的唯一方法是使用php preg_match_all,这样我可以计算字符重复的次数。

  $s = 'süuaãpérbrôséê';
  preg_match_all('/s/i', $s, $m);
  echo count($m[0]); //outputs 2 

我最初的想法是通过正则表达式并使用preg_match来确认匹配存在确定的次数,但我认为这是不可能的,所以我将创建一个方法来接收我需要的单词和正则表达式匹配,它将返回匹配数。

感谢。

答案 3 :(得分:0)

使用前瞻你可以实现这样的目标:

^(?=.*(\w)(.*\1){1}.*$)((?!\1).)*\1(((?!\1).)*\1){1}((?!\1).)*$

其中{1}是重复次数减1,所以为了查找是否有三次重复,这将是:

^(?=.*(\w)(.*\1){2}.*$)((?!\1).)*\1(((?!\1).)*\1){2}((?!\1).)*$

两三个人:

^(?=.*(\w)(.*\1){1,2}.*$)((?!\1).)*\1(((?!\1).)*\1){1,2}((?!\1).)*$

具有反向引用的前瞻可能非常强大:)