php / regex: Bulunan bir desen parçası, ama olduğu gibi dinlenme bırakarak nasıl değiştirilir?

4 Cevap php

Nasıl buldum desen bir alt değiştirme, ama olduğu gibi dinlenme bırakarak edebilir?

(EDIT: gerçek vaka xml etiketleri içinde tekrarlarını maç var, tabii aşağıdaki örnekte daha karmaşık ben regex kullanmak zorunda yüzden.!)

Diyelim ki "Z" harfi için bir kelimenin içindeki "X" harfi bir tekrarlarını değiştirmek istediğinizi varsayalım.

Ben istiyorum

aaXaa aax Xaa

olmaya

aaZaa AAZ Zaa

"X" gibi kelimelerin tekrarlarını bulmak bu gibi bir sorun değildir:

[^ X \ s] X[^\s]

but a normal preg_match replaces the complete match, where Ben istiyorum anything in the pattern except "X" to stay as it is.

Wich php bunu gerçekleştirmek için en iyi yolu nedir?

4 Cevap

Lütfen regex sadece ilgili kısmı eşleşirse, o (preg_replace('/X/', 'Z', $string) gibi) tam maç değiştirir sorun olmamalıdır.

Eğer değiştirilmesi gereken parçalar içeren regex gerekirse Ama, bunları yakalamak ve onları geri eklemek gerekir:

preg_replace('/(non-replace)X(restofregex)/', '$1Z$2', $string);

O X Z, ayrıca bu durumda preg kullanarak daha hızlı olduğu, str_replace() kullanabilirsiniz ile değiştirilmesi gibi gerçekten basit ise :

$sNew = str_replace("X", "Z", $sOld);

Bu deneyin

<?php
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>

Yukarıdaki örneğin çıktısı:

The bear black slow jumped over the lazy dog.

Eğer gerçekten bunun için regex kullanmak zorunda mı?

$output = str_replace('X', 'Z', $input);