![]() |
![]() |
![]()
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:
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 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 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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 14:06 |