Autor Zpráva
had
Profil *
Zdravím,
pokouším se sestavit regulární výraz na detekci (alespoň nejběžnějších) windows cest k souborům... mám něco takového:

<?php
// ($this->retezec obsahuje string z jinych OOP funkci)

preg_match_all('~([a-zA-Z]:\\[a-zA-Z0-9\.\-\\ \(\)_!:]+\.[a-zA-Z0-9]+)~', $this->retezec, $pole);
?>

Když zkusím výraz samotný na tomhle testeru http://webtest.spstrutnov.cz/reg_vyr_tester.php, tak projde... ale v kódu ne - vrací prázdné pole... co je špatně, nevíte někdo, prosím?
Předem díky za pomoc

Had
juriad
Profil
regulár je sice správně, ale není escapovaný pro použití v php, každé zpětné lomítko musí být escapované (lžu, ale pro tvé dobro)
'~([a-zA-Z]:\\\\[a-zA-Z0-9\\.\\-\\\\ \\(\\)_!:]+\\.[a-zA-Z0-9]+)~' // ideálně
'~([a-zA-Z]:\\\[a-zA-Z0-9\.\-\\\ \(\)_!:]+\.[a-zA-Z0-9]+)~' // cesta nejmenšího odporu

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single :
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';

// Outputs: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
had
Profil *
hm... no jo, vážně... Já měl ale za to, že když chci třeba escapovat tečku, že to jednoduše napíšu takhle...:

\.


...a děkuju, juriade. :)
juriad
Profil
regulární výraz je sice:
\.
ale jeho zápis jako řetězcový literál v php je:
'\\.'
Joker
Profil
had:
Já měl ale za to, že když chci třeba escapovat tečku, že to jednoduše napíšu takhle
Ano. Pro regulární výraz.
Když to je regulární výraz v řetězci, musí se ještě escapovat zpětné lomítko pro řetězec.
had
Profil *
hm..ok, tak jsem zase o něco chytřejší... ;) Pánové, díky...! :)

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: