Znak dolaru v regulárním výrazu
Jak zapsat znak dolaru v regulárním výrazu v PHP.
Znak dolaru ($
) má v regulárních výrazech zvláštní význam. Značí konec řetězce nebo konec řádku.
Zapsat na české klávesnici jde klávesovou zkratkou Pravý Alt + ů.
V případě, že je cílem najít v textu něco s dolarem, nabízí se znak $
escapovat (\$
).
$vysledek = preg_match("~\$~", "0.50 $"); // true
Výsledek bude dle očekávání kladný. Když znak dolaru v testovaném řetězci nebude, měl by výsledek vrátit false
.
$vysledek = preg_match("~\$~", "0.50 €"); // true
Jenže vrací také true
. Proč? PHP řetězce v dvojitých uvozovkách zpracovává tak, že se escapování dolaru vypustí. Domnívám se, že je to z toho důvodu, že dolar má v ouvozovkovaném řetězci význam jako označení případné proměnné.
$promenna = "kobercovka";
echo "Vypisuji $promenna"; // Vypisuji kobercovka
echo "Vypisuji \$promenna"; // Vypisuji $promenna
A to escapování se před předání do funkce preg_match
ztratí.
Řešení je naštěstí prosté, používat v regulárních výrazech jednoduché uvozovky.
$vysledek = preg_match('~\$~', "0.50 €"); // false
$vysledek = preg_match('~\$~', "0.50 $"); // true
A nebo přidat další zpětné lomítko pro escapování dolaru.
$vysledek = preg_match("~\\$~", "0.50 €"); // false
Odkazy jinam
- Uvozovky v PHP – rozdíl mezi jednoduchými a dvojitými uvozovkami
Komentáře