Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyrażenie regulane, wykluczenie elementów
batman
post
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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Cezar708
post
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
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ć.
Go to the top of the page
+Quote Post
Cezar708
post
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
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.
Go to the top of the page
+Quote Post
Cezar708
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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.
Go to the top of the page
+Quote Post
erix
post
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. ?>

(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował erix 7.12.2008, 14:29:01
Go to the top of the page
+Quote Post
batman
post
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. ?>
Go to the top of the page
+Quote Post

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: 24.08.2025 - 01:37