I'm looking for a regex that will find an exact repeating pattern (case-sensitive). For instance, middle initials in a name string. Examples:
I only want to keep the 1st occurrence and remove all others. What will find and remove exact duplicates?
You can use this in php
:
$repl = preg_replace('/\b([a-zA-Z]\W+)\1+/u', '$1', $str);
RegEx Breakup:
\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*
A non-regex way to solve this general problem: explode
on space and loop over the resulting array, unset
ting each key where the value is the same as the previous, then implode
to form the sequential-duplicate-free string.
$words = explode(' ', $string);
$previous = null;
foreach ($words as $key => $value) {
if ($value == $previous) unset($words[$key]);
$previous = $value;
}
$string = implode(' ', $words);