![]() |
![]() |
![]()
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: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie to:
1: Dopasuj START 2: Najpierw spróbuj dopasować całe zagnieżdżone START(...)END (rekurencja, GOTO 1: ), a jeśli się nie uda to: 3: Dopasuj jeden znak (kropka) 4: Jeśli napotkałeś END to zakończ, w przeciwnym razie GOTO 2: EDIT: No ty w swoich kwiatkach też masz wyrażenia regularne (IMG:style_emoticons/default/smile.gif) W dodatku ślamazarność wyrażeń to trochę mit. To znaczy często, jeśli porównujemy regexp z całą masą substr w pętli to okazuje się, że ciągłe kopiowanie stringa w inne miejsca w pamięci daje taki narzut, że wyrażenia okazują się szybsze (IMG:style_emoticons/default/smile.gif) Ten post edytował Noidea 28.09.2010, 11:33:49 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 17:46 |