Ignorowanie białych znaków w wyrażeniach regularnych


(Krzkaczor) #1

Hej!

Mam pewien tekst z którego chcę wyciągnąć dane problem w tym że dzielona jest linia co utrudnia wykonanie tego:

(oczywiscie to fragment). !(&!#@ mnie strzela bo trim() nie chce działać. Spróbowałem więc zastosować modyfikator s ale kiedy zrobię (.*?) w miejscu entera i paru spacji to on nie weźmie ostatniego wystąpienia tego co jest przed (.*?) tylko pierwsze przez co wynik jest bezużyteczny. Próbowałem modyfikator x ale w ogóle wtedy nie działa.

Pozdrawiam,

QWAK


(Sitemaster) #2
<?php 

$in='asjdajsdjasld

3

ashdash

4

zsasd';


preg_match('#3([a-z \s]+)4#i',$in,$out);

print_r($out);

?>

Nie wiem czy o to Ci chodziło. Do zakresu znaków dodajesz \s choć mozesz też \r\n ale możesz też kombinować coś w ten deseń z flagą s

<?php 

$in='asjdajsdjasld

3

ashdash

4

zsasd';


preg_match('#3(.+)?4#is',$in,$out);

print_r($out);

?>

(Zbyszekborkowski) #3

Nie będzie to optymalne, ale można "przelecieć" tekst funkcją str_replace() zamieniając znaki nowej linii na spacje, a później już zrobić co trzeba.


(Krzkaczor) #4

Też nie chce coś to działać jak powinno :confused:

Ok, dzięki już sobie poradziłem :slight_smile:


(Sitemaster) #5

To napisz jeszcze jak to zrobiłeś, bo zaraz ktoś inny może mieć podobny problem.


(Krzkaczor) #6

W końcu str_replacnołem \r\n na nic a ew. spacje wrzucałem już do wzorca. Śmiga :slight_smile:

Dzięki.


(GediMaster) #7

Przed preg_match() (lepiej zastosować preg_match_all()) potraktuj ciąg np. tym:

$ciag = preg_replace('/[\s]+/', ' ', $ciag);