Autor Zpráva
Carloss
Profil *
Dobrý den, pracuji s regulárními výrazy, ale nedovedu si poradit s jedním ořískem. Chci aby php nahradilo všechny uvedené znaky (např.: a, b, c) za 'd'. Problém nastává, když chci aby php nenahradilo jeden z uvedených znaků (a, b, c).

Skusil jsem kód:
$text = 'a,b,x,q,c';
$ignore = b; //znak se bude měnit náhodně
$text = preg_replace("/([^$ignore][abc])+/", 'd', $text);

Ale nefunguje správně. Všem děkuji předem za odpověď.


Omlouvám se, mělo tam být:
$ignore = 'b';
Kód ale pořád nefunguje.


Vyřešeno:
preg_replace("/([[^$ignore]abc])+/", 'd', $text);



Omlouvám se podruhé :), ale ani kód v předchozím příspěvku nefunguje.
fex
Profil *
Prosím co ti natom přesně nefunguje?
mě vyšlo ad,x,qd vše co mělo.
Tori
Profil
Carloss:
Napadl mne jen ošklivý způsob přes pole:

$text = 'a,b,x,q,c';
$search = array('a','b','c'); // výchozí nahrazované řetězce
$ignore = array('x');  // toto se nebude nahrazovat
$search = implode('|', array_diff($search, $ignore));
$text = preg_replace("/($search)+/", 'd', $text);
Akorát se musí před nahrazením zajistit, aby proměnná $search nebyla prázdná, jinak z toho vznikne chaotický řetězec.
Carloss
Profil *
Teď už opravdu vyřešeno. Divím se ale, že mě to nenapadlo dříve:
$text = preg_replace("/([abc](?<!$ignore))+/", 'd', $text);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: