Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwne zachowanie wzorca (preg_replace)
Forum PHP.pl > Forum > PHP
loganix
Witam,
Mam sobie taki oto wzór który ma mi usuwać wszystkie teksty prócz wybranych w zmiennej $mode
Kod
$patern="(".$startPattern."[^".$mode."][\s\S]+".$endPattern."[^".$mode."]|".$startPattern.".|".$sniePattern.".)";
$replace = "";
$tmp = preg_replace($patern, $replace, $string);

Przykładowy pattern wygląda tak:
Kod
(#####Start:[^2][\s\S]+#####End:[^2]|#####Start:.|#####End:.)

Gdzie $mode = 2. String do edycji:
Cytat
ALa ma kota. #####Start:1 kotek ma ale#####End:1 #####Start:2 kotek ma wała #####End:2 #####Start:3 2kotek ma 2ale#####End:3 #####Start:4 2kotek ma 2wała #####End:4

Przy ustawieniu $mode na 1 wynik jest poprawny i wyświetla tylko alternatywe pierwszą a resztę usuwa:
Cytat
ALa ma kota. kotek ma ale

Ale juz przy każdej innej niż jeden jest problem bo usuwa wszystko, nie wiem dlaczego
Wynik dla $mode innej niż 1:
Cytat
ALa ma kota.

Gdzie jest problem? z góry dziękuję za odpowiedź smile.gif

Dobra błąd znalazłem ale nie umiem sformułować teraz odpowiedniego wzorca żeby pomogło.
Chodzi o to, że przy tym wzorcu on lecąc pokolei po stringu znajduje ciąg "#####Start:1" i pasuje mu to do wzorca, dalej '[\s\S]' pozwalaja uzyc wszystkiego co napotka na drodze a kończy na "#####End:4" co tez do wzorca pasuje i dlatego usuwa wszystko.
Doszedłem do tego żeby gdzieś w tym miejscu kodu ("[\s\S]") dodać wzorzec aktywnej $mode ale nie wiem jak to zrobić.
Napisałem taki kod: (nie działa)
Kod
$string = "ALa ma kota. #####Start:1 kotek ma ale#####End:1 #####Start:2 kotek ma wala #####End:2 #####Start:3 2kotek ma 2ale#####End:3 #####Start:4 2kotek ma 2wala #####End:4";
$startPattern = '#####Start:';
$endPattern = '#####End:';
$mode = '2';
$patern="(".$startPattern."[^".$mode."][^".$startPattern.$mode."[\s\S]+".$endPattern.$mode."]+".$endPattern."[^".$mode."]|".$startPattern.".|".$endPattern.".)";
TrevorGryffits
Powiem szczerze, że nie przyjrzałem się zbytnio dokładnie całemu przypadkowi, ale dopisek sugeruje, że może chodzić o zachłanność regexa:
http://wyrazenia-regularne.pl/zachlannosc/
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.