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