Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne
Forum PHP.pl > Forum > PHP
mosky
Witam!

Pomóżcie bo ja nie daję rady sad.gif

Kod
<!--
<HTML
><HEAD
><TITLE
>php</TITLE
><META
NAME="GENERATOR"
CONTENT="AZ"><LINK
REL="NEXT"
TITLE="Test"
HREF="Test.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="book"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
-->


Jak napisać do tego czegoś wyrażenie regularne?
Upraszczając - chodzi mi o wywalenie wszystkiego co jest między znacznikami htmlowego komentarza?
sajborg
  1. <?php
  2. $str='<!--
  3. <HTML
  4. ><HEAD
  5. ><TITLE
  6. >php</TITLE
  7. ><META
  8. NAME="GENERATOR"
  9. CONTENT="AZ"><LINK
  10. REL="NEXT"
  11. TITLE="Test"
  12. HREF="Test.html"><META
  13. HTTP-EQUIV="Content-type"
  14. CONTENT="text/html; charset=UTF-8"></HEAD
  15. ><BODY
  16. CLASS="book"
  17. BGCOLOR="#FFFFFF"
  18. TEXT="#000000"
  19. LINK="#0000FF"
  20. VLINK="#840084"
  21. -->';
  22.  
  23. $str=preg_replace('/<!--(.*)-->/',' ',$str);
  24. echo $str
  25. ?>
mosky
Dzięki smile.gif

Ostatecznie konieczna jest niewielka modyfikacja ze względu na fakt, iż string ma dodane znaczniki nowej linii.

Kod
$reg['0']='/\\s/';
$reg['1']='/<!--(.*)-->/';

$str=preg_replace($reg,'',$str);
echo $str;
Marusz
Cytat(mosky @ 2005-09-05 21:25:49)
Dzięki smile.gif

Ostatecznie konieczna jest niewielka modyfikacja ze względu na fakt, iż string ma dodane znaczniki nowej linii.

Kod
$reg['0']='/\\s/';
$reg['1']='/<!--(.*)-->/';

$str=preg_replace($reg,'',$str);
echo $str;

Dlatego nalezy zmodyfikowac odrobine rozwiazanie paweb, dodajac parametr /s
  1. <?php
  2.  
  3. $str=preg_replace('/<!--(.*)-->/s',' ',$str);
  4. echo $str
  5.  
  6. ?>

A /s oznacza:
Cytat
If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines.
Radarek
Jak zwykle popelniacie bardzo prosty blad w tego typu wyrazeniach. Wydaje mi sie ze nawet nie zdajecie sobie sprawy ze sposobu dzialania (.*) itp :-).
Przyklad:

<!--hm-->
<h1>naglowek</h1>
<!-hm2-->

Co zlapie wasze wyrazenie? Oczywiscie ze calosc! (.*) zlapie:
"hm-->
<h1>naglowek</h1>
<!-hm2"

Zapewne php obsluguje takze niezachlanny operator * (poprzed dodanie ? za *).
Proponuje:
$str=preg_replace('/<!--(.*?)-->/s',' ',$str);
sajborg
Wlasnie nie wiedzialem nigdy po co jest .*? :]
Radarek
Cytat(paweb @ 2005-09-06 13:56:59)
Wlasnie nie wiedzialem nigdy po co jest .*? :]

roznica miedzy * a *? jest taka ze ten pierwszy operator bierze maksymalna ilosc znakow jaka pasuje a ten drugi bierze minimalna.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.