Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php-删除字符串中重复的单词_Php_Regex_String - Fatal编程技术网

Php-删除字符串中重复的单词

Php-删除字符串中重复的单词,php,regex,string,Php,Regex,String,输入:球代码 输出应该是:球代码 输入: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

输入:球代码

输出应该是:球代码

输入: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";
输出
对于输入
'awycodeawy'
,您可以将其设置为
'codeawy'
,而不是
'awycode'
。原因是可以找到一个
可变长度的前瞻
,这是
前瞻

基于正则表达式的OP问题解决方案的积极前瞻基础尝试

$arr = array('ball ball code', 'abcabc bde bde', 'awycodeawy');
foreach($arr as $str)
   echo "'$str' => '" . preg_replace('/(\w{2,})(?=.*?\\1)\W*/', '', $str) ."'\n";
输出

对于输入
'awycodeawy'
,您可以将其设置为
'codeawy'
,而不是
'awycode'
。原因是可以找到一个
可变长度的前向
一些
后向
不可能的东西

什么应该成为
aabaaabaaa
呢?正则表达式不保留状态,对吗?那么,为什么这是一个纯粹的正则表达式解决方案呢?有人吗?@克里斯蒂安:他们可以。在某种程度上。特别是,只要重复或遵循某个模式,就非常适合进行模式匹配@马克·拜尔斯的“aababaaa”应该是“aabababa”。考虑2个或更多字符。
aabaaabaaa
应该变成什么?正则表达式不保留状态,对吗?那么,为什么这是一个纯粹的正则表达式解决方案呢?有人吗?@克里斯蒂安:他们可以。在某种程度上。特别是,只要重复或遵循某个模式,就非常适合进行模式匹配@马克·拜尔斯的“aababaaa”应该是“aabababa”。考虑2个或更多字符。“abcabc bde bde”变为“abcabc bde”。难道不是“abc bde”吗?@noarm你说过你想要重复的单词,而不是单词的重复部分。但是,如果你想将它应用到部件上,则将<代码> > s+<代码>中间改为<代码> s*<代码>。试图匹配以后出现的类似事件几乎不可能在regex上做得很好(不破坏其他东西,比如将
book
制作成
bok
,或
密西西比州
制作成
missippi
)。@Amber:是的,这就是重点。OP陈述问题的方式不能用纯正则表达式解决。OP给出了一些他想要的例子。这个答案不适用于他给出的第二个例子:
awycodeawy
->
awycode
“abcabc-bde-bde”变成了“abcabc-bde”。难道不是“abc bde”吗?@noarm你说过你想要重复的单词,而不是单词的重复部分。但是,如果你想将它应用到部件上,则将<代码> > s+<代码>中间改为<代码> s*<代码>。试图匹配以后出现的类似事件几乎不可能在regex上做得很好(不破坏其他东西,比如将
book
制作成
bok
,或
密西西比州
制作成
missippi
)。@Amber:是的,这就是重点。OP陈述问题的方式不能用纯正则表达式解决。OP给出了一些他想要的例子。这个答案不适用于他给出的第二个例子:
awycodeawy
->
awycode
。谢谢。请问这段代码使用了多少系统资源?对于一个每分钟运行3次此代码的网站来说,使用它是否有意义。(请原谅我是一个noob:)@noarm:在目前的形式下,这段代码不是资源密集型的,但是我认为资源的使用取决于输入字符串的长度。如果您的输入字符串很大,则可能需要一段时间来扫描所有字符串以找到重复的字符串。不建议将其用于测试用户语句。这可能会损坏原始字符串。@JuniorMayhé:原始字符串只是在这里回荡,没有更新。我的错误是,如果有人试图更新原始字符串,这是一个句子,它会弄乱原始字符串。我看到有人在回响;-)非常感谢。请问这段代码使用了多少系统资源?对于一个每分钟运行3次此代码的网站来说,使用它是否有意义。(请原谅我是一个noob:)@noarm:在目前的形式下,这段代码不是资源密集型的,但是我认为资源的使用取决于输入字符串的长度。如果您的输入字符串很大,则可能需要一段时间来扫描所有字符串以找到重复的字符串。不建议将其用于测试用户语句。这可能会损坏原始字符串。@JuniorMayhé:原始字符串只是在这里回荡,没有更新。我的错误是,如果有人试图更新原始字符串,这是一个句子,它会弄乱原始字符串。我看到有人在回响;-)
'ball ball code' => 'ball code'
'abcabc bde bde' => 'abc bde'
'awycodeawy' => 'codeawy'