|
| (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
| |
|
|