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




To ja wiem, pytam sie ciebie czy twoj ostatni post to pytanie czy stwierdzenie (IMG:style_emoticons/default/smile.gif)
Bo jak przejrzysz kody to zauwazysz, ze uzywam leniwego wybierania znaków wiec nie rozumiem sensu twojego zdania
Cytat
Nie możesz się posługiwać operatorami kontrolującymi chciwość np (?)
Wiec sie pytam czy to pytanie czy to stwierdzenie (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: 10.10.2025 - 12:39