输入:球球代码
输出应该是:球码
输入:awycodeawy
输出应该是:awycode
我尝试了这些,但没有奏效:
$q = preg_replace("/\s(\w+\s)\1/i", "$1", $q);
$q = preg_replace("/s(w+s)1/i", "$1", $q);
这是针对 OP 问题的基于正则表达式的解决方案的积极前瞻基础尝试。
$arr = array('ball ball code', 'abcabc bde bde', 'awycodeawy');
foreach($arr as $str)
echo "'$str' => '" . preg_replace('/(\w{2,})(?=.*?\\1)\W*/', '', $str) ."'\n";
'ball ball code' => 'ball code'
'abcabc bde bde' => 'abc bde'
'awycodeawy' => 'codeawy'
正如您可以输入的那样'awycodeawy'
,它可以'codeawy'
代替'awycode'
. 原因是有可能找到一个不可能的variable length lookahead
东西lookbehind
。
$q = preg_replace("/\b(\w+)\s+\\1\b/i", "$1", $q);