/ 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
(Næsten) alt eller intet
Fra : Thomas Lindgaard


Dato : 28-01-02 12:42

Hejsa

Jeg sitter lige med et regulært udtryk, som jeg ikke helt forstår.

Teksten, der skal matches, ser således ud:
<id="1">Authorized access only</id>
<id="2">
This is a restricted site. Unauthorized access is strictly forbidden and
will be prosecuted to the full extent of the law. All access to this site is
logged.
</id>
<id="3">Registered users please login:</id>

.... og det regulære udtryk er følgende:
$pattern = "/ <id=\" (\d+) \"> (.*) <\/id> / xU";

Når jeg så kalder preg_match_all($text, $pattern, $matches), får jeg et
$matches-array a la følgende:
Array
(
[0] => Array
(
[0] => <id="1">Authorized access only</id>
[1] => <id="2">Registered users please login:</id>
)

[1] => Array
(
[0] => 1
[1] => 3
)

[2] => Array
(
[0] => Authorized access only
[1] => Registered users please login:
)

)
Her mangler teksten med id 2, da . ikke matcher newlines. Det ville jeg
rette ved at lave $pattern om:
$pattern = "/ <id=\" (\d+) \"> ([\w\n\t]*) <\/id> / xU";

.... men så får jeg bare tre tomme arrays. Hvorfor det?

/Thomas




 
 
Jakob Møbjerg Nielse~ (28-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 28-01-02 13:14

> Her mangler teksten med id 2, da . ikke matcher newlines. Det
> ville jeg rette ved at lave $pattern om:
> $pattern = "/ <id=\" (\d+) \"> ([\w\n\t]*) <\/id> / xU";

Du skal i hvert fald gøre det ikke-grådigt:

$pattern = "/ <id=\" (\d+) \"> ([\w\n\t]*?) <\/id> / xU";

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jakob Møbjerg Nielse~ (28-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 28-01-02 13:17

> $pattern = "/ <id=\" (\d+) \"> ([\w\n\t]*?) <\/id> / xU";

Forresten:

$pattern = "/ <id=\" (\d+) \"> ([.\n]*?) <\/id> / xU";

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Thomas Lindgaard (28-01-2002)
Kommentar
Fra : Thomas Lindgaard


Dato : 28-01-02 13:59

> $pattern = "/ <id=\" (\d+) \"> ([.\n]*?) <\/id> / xU";

Hmm... dutter ikke :(

I øvrigt er det gjort "ikke-grådigt" - det er derfor $pattern slutter med et
stort U :)

/Thomas



Jakob Møbjerg Nielse~ (28-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 28-01-02 15:11

> I øvrigt er det gjort "ikke-grådigt" - det er derfor $pattern slutter
med et
> stort U :)

Ah, det vidste jeg ikke

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jakob Møbjerg Nielse~ (28-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 28-01-02 16:37

> $pattern = "/ <id=\" (\d+) \"> ([.\n]*?) <\/id> / xU";

Har du prøvet om det virker uden modifiers?

$pattern = "/<id=\"(\d+)\">([.\n]*?)<\/id>/";

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Morten Winther (28-01-2002)
Kommentar
Fra : Morten Winther


Dato : 28-01-02 16:03


"Thomas Lindgaard" <thomas@dnspilot.com> wrote in message
news:a33der$vru$1@news.cybercity.dk...
> Her mangler teksten med id 2, da . ikke matcher newlines. Det ville jeg
> rette ved at lave $pattern om:
> $pattern = "/ <id=\" (\d+) \"> ([\w\n\t]*) <\/id> / xU";


Brug m i stedet. Den er til newlines:

http://www.php.net/manual/en/pcre.pattern.modifiers.php

/ morten




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

Månedens bedste
Årets bedste
Sidste års bedste