Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyrażenie regularne
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Mam taki ciąg
Kod
START bla bla bla END inneblabla inneblabla

Chcę zamienić wszystko między START a END na coś innego, włącznie ze START i END.
No to piszemy proste wyrażenie:
  1. $text = 'START bla bla bla END inneblabla inneblabla';
  2. $text2 = preg_replace('/^START\s.*?\sEND/','#zamienione#',$text);
  3. echo $text2;

W rezultacie otrzymamy:
Kod
#zamienione# inneblabla inneblabla

Proste.
Sprawa się komplikuje, gdy pomiędzy START i END włożym podSTART i pod END
Kod
START bla bla bla START blablaW END bla3 END inneblabla inneblabla

W wyniku naszego wyrażenia otrzymamy
Kod
#zamienione# bla3 END inneblabla inneblabla

A powinniśmy otrzymać to samo co w pierwszym przypadku.
No to powiecie: zamien .*? na .* i po sprawie. No nie do końca, bo jest jeszcze jeden przypadek, ze START i END pojawi nam się też rownożędnie do pierwszego, czyli np:
Kod
START bla bla bla START blablaW END bla3 END inneblabla START ccc xxx END inneblabla

Zrobie .* da nam
Kod
#zamienione# inneblabla

a mi chodzi, by uzyskac
Kod
#zamienione# inneblabla START ccc xxx END inneblabla


Podsumowując:
ma być zamienione tylko pierwsze główne START END, nawet jeśli ma w sobie inne START END, ale nie można już ruszych późniejszych START END
Idzie to zrobić wyrażeniem regularnym?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
wój kod sypnie się, jeśli START END będzie zagnieżdżone więcej niż 2 razy. Jeśli się to nigdy nie zdarzy, to OK
Tak, wiem o tym. Z założenie nie będzie jednak takiej sytuacji

Cytat
to lepiej jest wykorzystać tak zwane "recursive subpatterns". Działa to tak samo jak zwykła rekurencja (?R), tyle że nie wstawia tam całego oryginalnego wyrażenia, tylko n-ty nawias okrągły. A zapis jest taki: (?1), (?2), (?n)
Działa wyśmienicie, dzięki (IMG:style_emoticons/default/smile.gif)
Muszę poczytać o tych rekursywnych wyrażeniach bo próbuje przetrawić ten kod co podales i za chiny go nie kumam (IMG:style_emoticons/default/smile.gif)
Jeszcze gdzie jakiego backdora mi wlozyles (IMG:style_emoticons/default/winksmiley.jpg)

edit: i już chyba kumam (IMG:style_emoticons/default/smile.gif)

Z ciekawości zrobiłem testy czasowe.
Wyrażenie regularne jest szybsze od moich "kwiatków" (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- nospor   wyrażenie regularne   28.09.2010, 07:57:31
- - kreciko   Musisz w środku tego wyrażenia dodać bardzo podobn...   28.09.2010, 08:18:58
- - nospor   Juz myslalem ze bedzie dobrze ale nie [PHP] pobier...   28.09.2010, 08:25:06
- - kreciko   [PHP] pobierz, plaintext $text2 = preg_replace...   28.09.2010, 09:06:58
- - nospor   kreciko ale wowczas łyknie też tego ostatniego END...   28.09.2010, 09:08:07
- - wookieb   preg_replace_callback i trochę rekurencyjnych wywo...   28.09.2010, 09:08:45
|- - kreciko   Cytat(wookieb @ 28.09.2010, 10:08:45 ...   28.09.2010, 09:33:09
- - nospor   CytatNie możesz się posługiwać operatorami kontrol...   28.09.2010, 09:12:44
- - wookieb   "?" to operator leniwego wybierania znak...   28.09.2010, 09:14:24
- - nospor   To ja wiem, pytam sie ciebie czy twoj ostatni post...   28.09.2010, 09:17:04
- - wookieb   Stwierdzenie, że nie możesz go używać   28.09.2010, 09:19:56
- - nospor   why, wookieb why?   28.09.2010, 09:24:26
- - wookieb   Dobra może powiedz mi po co chcesz to zrobić? Wies...   28.09.2010, 09:30:20
- - nospor   CytatDobra może powiedz mi po co chcesz to zrobić?...   28.09.2010, 09:33:16
- - wookieb   Cytat(nospor @ 28.09.2010, 10:33:16 )...   28.09.2010, 09:35:29
- - nospor   Taką jak opisałem. Obszedłem to troszke i mam roz...   28.09.2010, 09:39:55
- - Noidea   @nospor Twój kod sypnie się, jeśli START END będzi...   28.09.2010, 10:58:07
- - nospor   Cytatwój kod sypnie się, jeśli START END będzie za...   28.09.2010, 11:25:29
- - Noidea   Ogólnie to: 1: Dopasuj START 2: Najpierw spróbuj d...   28.09.2010, 11:25:42
- - nospor   CytatNo ty w swoich kwiatkach też masz wyrażenia r...   28.09.2010, 11:36:10
- - Methestel   Chcesz robić walidacja poprawności tekstu (czy lic...   28.09.2010, 14:15:09
- - nospor   Nie wiem jak bardzo trzeba po chinsku czytac by do...   28.09.2010, 18:49:23
- - Methestel   Nie doszedłem do takiego wniosku tylko zapytałem c...   28.09.2010, 20:01:39
- - nospor   CytatPrzepraszam, że chciałem podzielić się doświa...   28.09.2010, 20:08:18
- - Methestel   Nie będe   28.09.2010, 20:09:52


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: 12.10.2025 - 14:06