Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyrażenie regulane, wykluczenie elementów
batman
post 7.12.2008, 13:29:11
Post #1





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Mam problem z banalnym dla obeznanych w temacie wyrażeniem regularnym. Jak wykluczyć z wyrażenia fragment tekstu?
  1. <?php
  2. $pattern = '|{(.+)}|';
  3. $replacement = '<?= $$1 ?>';
  4. $content = '{jakis_tekst} bla bla bla {tpl=inny_tekst}';
  5.  
  6. echo preg_replace($pattern, $replacement, $content);
  7. ?>


Powyższa regułka zamieni zawartość zmiennej $content na takie coś:

<?= $jakis_tekst ?> bla bla bla <?= $tpl=inny_tekst ?>

Zależy mi by regułka ominęła wszystko, co zawiera tpl= Jak?


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Cezar708
post 7.12.2008, 13:41:48
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


spróbuj z preg_match_all() trzeci parametr to array &$matches czyli wszystkie dopasowania, następnie implode() i powinieneś uzyskać efekt o który Ci chodzi

pozdrawiam
Cezar708
Go to the top of the page
+Quote Post
batman
post 7.12.2008, 13:44:18
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Nie chodzi mi o obejście problemu, a o regułkę, która dopasuje tylko to, co trzeba dopasować.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Cezar708
post 7.12.2008, 13:55:01
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


to może tak Ci wystarczy:

  1. <?php
  2. $pattern = '|({.+})(.+)({.+})|';
  3. $replacement = '$1<?= $$2 ?>$3';
  4. $content = '{jakis_tekst} bla bla bla {tpl=inny_tekst} asasdfs {tpl=jescze_inny}';
  5.  
  6. echo preg_replace($pattern, $replacement, $content);
  7. ?>


pozdawiam
Go to the top of the page
+Quote Post
batman
post 7.12.2008, 14:01:40
Post #5





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat(Cezar708 @ 7.12.2008, 13:55:01 ) *
to może tak Ci wystarczy:

Niestety nie wystarczy. To w ogóle nie działa.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Cezar708
post 7.12.2008, 14:06:29
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


o cholera, faktycznie, z błędem:

to jeszcze jedna próba winksmiley.jpg

  1. <?php
  2. $pattern = '|}(.+?){|';
  3. $replacement = '}<?= $$1 ?>{';
  4. $content = '{jakis_tekst} bla bla bla {tpl=inny_tekst} asasdfs {tpl=jescze_inny}';
  5.  
  6. echo preg_replace($pattern, $replacement, $content);?>


Ten post edytował Cezar708 7.12.2008, 14:07:07
Go to the top of the page
+Quote Post
batman
post 7.12.2008, 14:14:40
Post #7





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Nie wiem, czy się rozumiemy.
Z ciągu:

{jakis_tekst} bla bla bla {tpl=inny_tekst} asasdfs {tpl=jescze_inny}

chcę uzyskać ciąg:

<?= $jakis_tekst ?> bla bla bla {tpl=inny_tekst} asasdfs {tpl=jescze_inny}

Twoja regułka wywala wszystko poza tekstem w klamrach.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
erix
post 7.12.2008, 14:28:29
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. $content = '{jakis_tekst} bla bla bla {tpl=inny_tekst} asasdfs {tpl=jescze_inny}';
  3.  
  4. echo htmlspecialchars(preg_replace('/{([A-Za-z_]+)}/si', '<'.'?= $1 ?'.>, $content));
  5. ?>

winksmiley.jpg

Ten post edytował erix 7.12.2008, 14:29:01


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
batman
post 7.12.2008, 14:40:16
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Dzięki ~erix. Dokładnie o to chodziło. Zmieniłem kilka rzeczy i ostatecznie wyrażenie wygląda tak:
  1. <?php
  2. $content = '{jakis_tekst} bla bla bla {tpl=inny_tekst} asasdfs {tpl=jescze_inny}';
  3. echo htmlspecialchars(preg_replace('|{([A-Za-z_]+)}|si', '<?= $$1 ?>', $content));
  4. ?>


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 09:46