2016-05-24 7 views
-1

die Suche nach einem regulären Ausdruck ignoriert, die ein einzelnes Zeichen (spezifisches) erkennen, aber es ignoriert, wenn sie in doppelten oder dreifachen kommt ... N.Regulärer Ausdruck Muster, das Doppel Aussehen eines Charakter

abcde <- looking for this (c's separated by another character) 
abccdce <- not this (immediately repeating c's) 

I Ich möchte einzelne Zeichen ersetzen, sie aber bei der Wiederholung ignorieren.

gewünschte Ergebnisse (ersetzen Single 'c' mit 'foo')

abcde -> abFOOde 
abccdce -> abccdce 
abcdeabccde ->abFOOdeabccde 

Hinweis: Ich weiß, wie das Gegenteil zu tun - ersetzen Doppel aber ignorieren Single

$pattern = '/c\1{1}/x'; 
$replacement = 'FOO'; 
preg_replace($pattern, $replacement, $text); 
+0

Warum "abccdce" nicht produzieren "abccdFOOe"? Als Nebenschrift ist '{1}' in einem Regex-Muster immer nutzlos. –

Antwort

2

Sie lookarounds verwenden können dies für:

(?<!c)c(?!c) 

Was bedeutet Spiel c wenn sie nicht vonumgebens auf beiden Seiten.

RegEx Breakup:

(?<!c) # negative lookbehind to fail the match if previous position as c 
c  # match literal c 
(?!c) # negative lookahead to fail the match if next position as c 

Code:

$repl = preg_replace('/(?<!c)c(?!c)/', 'FOO', $text); 
+0

@fatfish: Hat dies für Sie funktioniert? – anubhava

Verwandte Themen