Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: RegEX i \n
Forum PHP.pl > Forum > PHP
Luciano
Witam,

Chcialbym sie dowiedziec co jest przyczyna problemu, ze wyrazenia regularne zdaja sie "nie chwytac" wyrazen
ze stringow w ktorych jest znak nowej lini. Na przyklad mamy dany ciag:

  1. <?php
  2. $xml = "<ROOT><T1>ns</T1><T1>2</T1><AB><A>11</A><B>22</B><C>33</C></AB></ROOT>";
  3. ?>


i wyrazenie


/<T1>.*?</T1>/x


funkcja preg_match_all zwroci mi tablice [0] = ns [1] = 2

Jesli natomiast zmodyfikuje string dodajac znak nowej lini po ns

  1. <?php
  2. $xml = "<ROOT><T1>nsn</T1><T1>2</T1><AB><A>11</A><B>22</B><C>33</C></AB></ROOT>";
  3. ?>


lub wpisze np.

  1. <?php
  2. $xml = '<ROOT>
  3. <T1>
  4. ns
  5. </T1>
  6. <T1>2</T1><AB><A>11</A><B>22</B><C>33</C></AB></ROOT>';
  7. ?>


w wyniku otrzymam tylko [0] = 2

Nie bardzo rozumiem dlaczego tak sie dzieje, myslalem ze KROPKA oznacza kazyd znak.

Pozdrawiam
hwao
Musisz dodac flage "s", czyli:

Kod
/<T1>.*?<\/T1>/xs


Prosze, używaj bbcode wtedy dużo łatwiej się pomaga.

Tak, doladnie chodzi o s
bendi
A ja mam wrażenie że chodzi o modyfikator /s - czyli coby kropka też dobierała się do znaków nowej linii.

Tak wogóle to pytanie bardzo często się pojawia możnaby je do jakiegoś FAQ wrzucić.
Luciano
Dzieki wielkie za pomoc!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.