wyrażenia regularne - dwie metody; jedna nieprawidłowa

1

Witam,

Pisząc pewien projekt z technologii internetowych, szanowny profesor przyczepił się do wyrażeń regularnych.
W pewnym fragmencie napisałem(w uproszczeniu, które też jest "nie tak"):

if(preg_match('/^.*(DIE).*$/s', $txt))
  die;

Dostałem opier*** i że jak chcę już takie coś pisać to w ten sposób(pomijając już strpos)

if(preg_match('/(DIE)/', $txt))
  die;

Ponieważ pierwszy przykład można oszukać. Mam na zadanie domowe odpowiedzieć mu dlaczego...
Ja tutaj nic nie widzę, co można by "popsuć".
Co jest nie tak z pierwszym przykładem?

0

W sumie nie widzę większej różnicy między pierwszym, a drugim. W pierwszym wyrażeniu masz jeszcze modyfikator "s", co pozwala na wielolinijkowe dopasowanie - kropka dopasuje też znaki nowej linii. Tak sprawdziłem tę koncepcję:

<?php
  
  $txt = "you must DIE!";
  var_dump(preg_match('/^.*(DIE).*$/s', $txt));
  var_dump(preg_match('/(DIE)/', $txt));
  
  
  echo "<hr>";
  $txt = "you 
  must 
  DIE!
  ";
  var_dump(preg_match('/^.*(DIE).*$/s', $txt));
  var_dump(preg_match('/(DIE)/', $txt)); 

U mnie (PHP 5.3.1) dostaję na wyjściu 4 jedynki. Obydwa wyrażenia dopasowały zarówno tekst ze znakami nowej linii, jak i bez nowych linii. Może więc pierwsze wyrażnie pozwala dopuścić jakieś śmieci typu dane binarne (kody ASCII 0-32)? Drugie na to samo pozwala przecież. Nie wiem...
Wydaje mi się, że coś Twój profesor kręci :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1