![]() |
![]() ![]() |
![]() |
![]()
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.".)"; |
|
|
![]()
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/ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:07 |