|
| Regex - match alt undtagen.. Fra : Martin Seebach |
Dato : 13-10-02 17:07 |
|
Er der en måde jeg kan modificere '.', så den matcher alt, undtagen newline
(afh. af mode) og et eller flere tegn?
Således at jeg kan få preg_match("<.*>", $text) til at matche ethvert enkelt
tag i stringen, ved at modificere . til ikke at matche >.
--
Venlig hilsen
Martin Seebach
- min email adresse virker..
| |
Larz (13-10-2002)
| Kommentar Fra : Larz |
Dato : 13-10-02 17:40 |
|
Martin Seebach wrote:
> Er der en måde jeg kan modificere '.', så den matcher alt, undtagen newline
> (afh. af mode) og et eller flere tegn?
Det gør den som standard. Hvis du vil have den til at tage newlines med
skal du angive s switchen... altså: preg_match('/<.*>/s',$subj,$reg)
> Således at jeg kan få preg_match("<.*>", $text) til at matche ethvert enkelt
> tag i stringen, ved at modificere . til ikke at matche >.
Så skal du måske i stedet bruge preg_match_all('/<[^>]*?>/si',$subj,$reg)
Den vil vist match alle tags som også spænder over flere linier... tror
jeg :) har ikke lige testet...
Se forøvrigt: http://dk.php.net/pcre
--
-
Lars
http://coder.dk/sohofaq.php - Uofficiel WOL SOHO 77 FAQ
To mail me remove your pants.
| |
Larz (13-10-2002)
| Kommentar Fra : Larz |
Dato : 13-10-02 17:58 |
|
Larz wrote:
> Så skal du måske i stedet bruge preg_match_all('/<[^>]*?>/si',$subj,$reg)
> Den vil vist match alle tags som også spænder over flere linier... tror
Der skulle nok have stået
preg_match_all('/(<([^>]*?)>)/si',$subj,$reg)
--
-
Lars
http://coder.dk/sohofaq.php - Uofficiel WOL SOHO 77 FAQ
To mail me remove your pants.
| |
Martin Seebach (14-10-2002)
| Kommentar Fra : Martin Seebach |
Dato : 14-10-02 09:33 |
|
"Larz" <lp@your-pants.coder.dk> wrote in message
news:Ylhq9.101686$Qk5.4490659@news010.worldonline.dk...
> Martin Seebach wrote:
> > Er der en måde jeg kan modificere '.', så den matcher alt, undtagen
newline
> > (afh. af mode) og et eller flere tegn?
>
> Det gør den som standard. Hvis du vil have den til at tage newlines med
> skal du angive s switchen... altså: preg_match('/<.*>/s',$subj,$reg)
$line="<form action=\"hej.php?med=dig\" method=\"post\"><input name=\"navn\"
type=\"text\"></form>";
preg_match("/(<form.*>)(.*)(<\/form>)/", $line, $matches);
print_r($matches);
giver:
Array
(
[0] => <form action="hej.php?med=dig" method="post"><input name="navn"
type="text"></form>
[1] => <form action="hej.php?med=dig" method="post"><input name="navn"
type="text">
[2] =>
[3] => </form>
)
Dvs. den første parantes matcher 'forbi' >, og det vil jeg undgå. Konkret
har jeg løst problemet ved at lave en character class med alle de tegn der
optræder, undtagen, selvfølgelig, >
Beklager hvis jeg udtrykte mig uklart.
--
Venlig hilsen
Martin Seebach
- min email adresse virker..
| |
Niels Andersen (14-10-2002)
| Kommentar Fra : Niels Andersen |
Dato : 14-10-02 10:46 |
|
Martin Seebach wrote in <3daa8139$0$32608$edfadb0f@dspool01.news.tele.dk>:
>> preg_match('/<.*>/s',$subj,$reg)
> Dvs. den første parantes matcher 'forbi' >, og det vil jeg undgå.
Jokere (som fx. *) er som standard "greedy". Dvs. de tager så meget som
muligt. Du kan i stedet for "*" bruge "*?", så virker det modsat. Det vil
jeg tro løser dit problem.
preg_match('/<.*?>/s',$subj,$reg)
--
Mvh.
Niels Andersen
(la nels. anersyn.)
| |
|
|