我想知道是否有办法测试某个单词是否在任何位置重复出现?
我目前正在使用这个正则表达式来测试它,但不能正常工作,因为如果我添加更多的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
感谢。
答案 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).)*$
等
具有反向引用的前瞻可能非常强大:)