Post
#1
|
|
|
Grupa: Moderatorzy Postów: 36 561 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:
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? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 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 sytuacjiCytat 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) |
|
|
|
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
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 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 15:14 |