Na navigaci | Klávesové zkratky

Translate to English… Ins Deutsche übersetzen…

Víte, co znamená $ v regulárním výrazu?

Nejprve otázka: mačne nebo nemačne?

$str = "123\n";

echo preg_match('~^\d+$~', $str);

Kdo z vás si myslí, že funkce vrátí false, protože regulární výraz běží v jednořádkovém režimu a nepovoluje v řetězci žádné jiné znaky krom číslic, ten se mýlil.

Malinko odbočím. Regulární výrazy v jazyce Ruby mají jednu nectnost (nesoulad s de facto standardem PERLu): znaky ^ a $ neoznačují začátek a konec řetězce, ale jen jednoho řádku v něm. Neznalost tohoto faktu může způsobit bezpečnostní zranitelnost, jak třeba upozorňuje dokumentace Rails. PHP se chová standardně, ale málokdo už ví, co přesně ono standardní chování znamená. Dokumentace meta-znaku $ je totiž nepřesná. (už opraveno)

Správně má být, že znak $ znamená konec řetězce nebo ukončující odřádkování; ve víceřádkovém režimu (modifikátor m) znamená konec řádku.

Skutečný konec řetězce chytá sekvence \z. Nebo je možné použít dolar společně s modifikátorem D.

$str = "123\n";
echo preg_match('~^[0-9]+$~', $str); // TRUE
echo preg_match('~^[0-9]+$~D', $str); // FALSE
echo preg_match('~^[0-9]+\z~', $str); // FALSE

Komentáře

  1. Michal Špaček http://www.michalspacek.cz #1

    avatar

    $ je lépe popsán v kapitole o modifikátorech u modifikátoru mhttp://www.php.net/…odifiers.php

    před 5 lety | odpovědět
  2. starenka #2

    avatar

    Dobrá docka s příkladem nikdy neuškodí…

    před 5 lety | odpovědět
  3. Jakub Vrána http://php.vrana.cz #3

    Dokumentaci jsem zpřesnil: http://svn.php.net/…n.syntax.xml?…

    před 5 lety | odpovědět

Zanechat komentář

Text komentáře
Kontakt

(kvůli gravataru)



*kurzíva* **tučné** "odkaz":http://example.com /--php phpkod(); \--