Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziwne zachowanie wzorca (preg_replace)
loganix
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 20.08.2008

Ostrzeżenie: (0%)
-----


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ź (IMG:http://forum.php.pl/style_emoticons/default/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.".)";
Go to the top of the page
+Quote Post
TrevorGryffits
post
Post #2





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:07