Autor | Zpráva | ||
---|---|---|---|
Prochy Profil |
#1 · Zasláno: 14. 2. 2015, 15:40:01
Zdravím,
potřeboval bych dát dohromady regulární výraz, který mi v následujících případech daný text odstraní (tam kde jsou čísla): +420xxxx, 00420xxx 420xxxxx První jsem si říkal, že bych to udělal jednoduše pomocí str_replace, ale tam podle mě není zaručený, že to nahradí pouze na začátku řetězce. Tohle bych dal dohromady pro 3 regulární výrazy, ale věřím, že to je možné hodit všechno do jednoho výrazu a s tím si tedy nevím rady. Děkuji |
||
tiso Profil |
/^((?:\+|00)?420).+/ |
||
Prochy Profil |
tiso:
Super funguje výborně, mohu se zeptat, co znamená operátor "?:"? Vím, že otázník většinou znamená 0-1x ale v této souvislosti to v tom moc nevidím nebo tedy vidím to, 0-1x tam může být 00 nebo 420, ale ta dvojtečka mi tam vrtá hlavou. Počítám, že | znamená OR. Děkuji |
||
juriad Profil |
#4 · Zasláno: 14. 2. 2015, 20:34:45
(?:regular) znamená nepojmenovanou skupinu.
|
||
Joker Profil |
#5 · Zasláno: 15. 2. 2015, 09:56:44
Kdyby vysvětlení z [#4] juriad bylo nejasné: U regulárních výrazů jdou zachytávat i jednotlivé podvýrazy v závorkách a pak na ně odkazovat (příklad:
/(.+) \1/ znamená text následovaný mezerou a tím stejným textem, třeba "ahoj ahoj"). Závorka opatřená modifikátorem ?: nevytvoří ten zpětný odkaz.
Výraz /^((\+|00)?420).+/ by fungoval stejně jako /^((?:\+|00)?420).+/, akorát to první vytvoří odkaz \1 pro obsah velké závorky a \2 pro obsah malé závorky, zatímco to druhé vytvoří jen \1 pro velkou závorku. Protože se s těmi odkazy pojí určitá režie, tak jak to napsal tiso se to bude zpracovávat rychleji. I když u takhle jednoduchého výrazu asi rozdíl nebude poznat.
|
||
Časová prodleva: 9 let
|
0