/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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.)

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste