Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 - Fatal编程技术网

使用PHP正则表达式搜索精确的重复序列(并删除所有重复项)

使用PHP正则表达式搜索精确的重复序列(并删除所有重复项),php,regex,Php,Regex,我正在寻找一个正则表达式,它将找到一个精确的重复模式(区分大小写)。例如,名称字符串中的中间首字母。示例: Jim G Bob是“G”x2上的对手 吉姆·G·鲍勃是《G·X2》的对手 汤姆·H·福特在《H》X3上是一个对手,等等 莎拉·霍华德不是对手,因为我们有“H”、“H”和“H”(都是独一无二的) 我只想保留第一个事件并删除所有其他事件。什么可以找到并删除精确的重复项?您可以在php中使用它: $repl = preg_replace('/\b([a-zA-Z]\W+)\1+/u', '

我正在寻找一个正则表达式,它将找到一个精确的重复模式(区分大小写)。例如,名称字符串中的中间首字母。示例:

  • Jim G Bob是“G”x2上的对手
  • 吉姆·G·鲍勃是《G·X2》的对手
  • 汤姆·H·福特在《H》X3上是一个对手,等等
  • 莎拉·霍华德不是对手,因为我们有“H”、“H”和“H”(都是独一无二的)

我只想保留第一个事件并删除所有其他事件。什么可以找到并删除精确的重复项?

您可以在
php
中使用它:

$repl = preg_replace('/\b([a-zA-Z]\W+)\1+/u', '$1', $str);

正则表达式分解:

\b           # word boundary
(            # capturing group #1 start
   pL        # match a single unicode letter 
   \W+       # match 1 or more non-word character
)            # capturing group #1 start
\1+          # match 1 or more of captured group #1 to match *repeats*

解决此一般问题的一种非正则方法:
在空间上分解
并在生成的数组上循环,
取消设置
在值与前一个值相同的每个键,然后
内爆
以形成连续的无重复字符串

$words = explode(' ', $string);
$previous = null;
foreach ($words as $key => $value) {
    if ($value == $previous) unset($words[$key]);
    $previous = $value;
}
$string = implode(' ', $words);

为什么要更改一个有效名称?^句号,同时提出一个全新的问题。人们普遍认为,在将问题带到这里之前,海报应该展示他们所做的尝试。如果你有一些代码,请编辑成问题。谢谢你的反馈。我将在以后的帖子中发布更多的细节/示例代码。非常感谢您——这个正则表达式工作得非常好。我不精通正则表达式,非常感谢你的帮助!谢谢你!