/ 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
Et regexp jeg ikke kan få til at virke
Fra : Lone


Dato : 18-08-03 09:06

Wups, jeg postede den her ved en fejl i dk.edb.internet.webdesign.

Er der nogen i den her gruppe, der har et bud på nedenstående:

----
Jeg er ny indenfor regexp og kan ikke finde ud af at få hevet sidenumre ud
af en tekst. Pseudokoden er "Et 1-til-4-cifret tal efterfulgt af et
mellemrum (måske), efterfulgt af en bindestreg, efterfulgt af et mellemrum
(måske), efterfulgt af et 1-til-4-cifret tal."

F.eks.:
bla bla bla 12-20 bla bla bla
bla bla bla 12 - 20 bla bla bla
bla bla bla 254 - 274 bla bla bla
bla bla bla 25-27 bla bla bla

Jeg har prøvet noget i stil med if(ereg("(<!--
pages -->[0-9]{1,4}-[0-9]{1,4}<!-- pages -->)",$temp,$regs)), men det dutter
ikke.

Er der nogen der kan hitte ud af det? Jeg er kørt sur i trial-and-error

Vh Lone



 
 
Kim Schulz (18-08-2003)
Kommentar
Fra : Kim Schulz


Dato : 18-08-03 09:28

On Mon, 18 Aug 2003 10:06:25 +0200
"Lone" <ingen@email.dk> wrote:
> Wups, jeg postede den her ved en fejl i dk.edb.internet.webdesign.
>
> Er der nogen i den her gruppe, der har et bud på nedenstående:
>
> ----
> Jeg er ny indenfor regexp og kan ikke finde ud af at få hevet
> sidenumre ud af en tekst. Pseudokoden er "Et 1-til-4-cifret tal
> efterfulgt af et mellemrum (måske), efterfulgt af en bindestreg,
> efterfulgt af et mellemrum(måske), efterfulgt af et 1-til-4-cifret
> tal."
>
> F.eks.:
> bla bla bla 12-20 bla bla bla
> bla bla bla 12 - 20 bla bla bla
> bla bla bla 254 - 274 bla bla bla
> bla bla bla 25-27 bla bla bla
>
> Jeg har prøvet noget i stil med if(ereg("(<!--
> pages -->[0-9]{1,4}-[0-9]{1,4}<!-- pages -->)",$temp,$regs)), men det
> dutter ikke.
>
> Er der nogen der kan hitte ud af det? Jeg er kørt sur i
> trial-and-error


hvis ikke der ellers er tal i linjen burde du kunne gøre det med:
preg_match_all("/([0-9]{1,4])/",$text,$matches);

så har du $matches[1][X] der indeholder de tal som er i linjen. X er tal
fra 0 til det antal af tal (1-4 cifre) den har fundet.
så kan du bare checke matches[1][1] om den er et tal, og hvis den er
det, så har du et "tal-tal", er det ikke et tal så har du bare "tal".

Alternativt burde noget ala følgende kunne klare det:

preg_match_all("/([0-9]{1,4][ ].+[-].+[ ].+[0-9]{0,4})/"
,$text,$matches);

så indeholder $matches[1][X] alle de sidetal som der er fundet (altså
helle tallet inkl bindestreg i hvert X)

Lone (18-08-2003)
Kommentar
Fra : Lone


Dato : 18-08-03 14:14

>
> preg_match_all("/([0-9]{1,4][ ].+[-].+[ ].+[0-9]{0,4})/",$text,$matches);
>
> så indeholder $matches[1][X] alle de sidetal som der er fundet (altså
> helle tallet inkl bindestreg i hvert X)

Jeg kan ikke helt finde ud af om regexp'et virker. Jeg forsøger at printe
resultaterne ud
ved print_r($matches[1][0]), print_r($matches[1][1])..osv. men uden held.
Der er kun tomme arrays.

Betyder det ikke at regexp'et tilsyneladende ikke fanger tegnene?

For at hjælpe har jeg lavet et 'markup' af alle sidetallene. De står altså
alle sammen på html-siden sådan her:

Bla bla bla bla <!-- start sidenr -->12-29<!-- end sidenr --> bla bla bla
Bla bla bla bla <!-- start sidenr -->32 - 56<!-- end sidenr --> bla bla bla

Kan man så ikke bare søge på <!-- start sidenr --> for at gøre det nemmere?

Vh Lone



Anders K. Madsen (18-08-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 18-08-03 17:23

On Mon, 18 Aug 2003 15:13:50 +0200
"Lone" <ingen@email.dk> wrote:

[snip]
> Betyder det ikke at regexp'et tilsyneladende ikke fanger tegnene?
>

Ja.

> For at hjælpe har jeg lavet et 'markup' af alle sidetallene. De står altså
> alle sammen på html-siden sådan her:
>
> Bla bla bla bla <!-- start sidenr -->12-29<!-- end sidenr --> bla bla bla
> Bla bla bla bla <!-- start sidenr -->32 - 56<!-- end sidenr --> bla bla bla
>
> Kan man så ikke bare søge på <!-- start sidenr --> for at gøre det nemmere?

Tjoeh, da kan du da godt... Så kan du endda bruge explode() til at splitte
med...
Men det vil nu være simplere med en regex...

Bare lige "from the top of my head", så vil jeg gætte på noget á la:
<?php
$str = "Bla bla bla 15-257 bla 2- 376 bla bla bla 22 - 26 bla bla 9 -1721";
// Matcher den pseudo-regex du gav tidligere i denne tråd,
// men afleverer KUN tallene, under hver deres array-key.
preg_match_all("/([0-9]{1,4})\s?\-\s?([0-9]{1,4})/", $str, $matches);
print_r($matches);
?>

Håber du kan bruge det til noget og at det virker.

Mvh.
   Madsen

--
* Anders K. Madsen * http://lillesvin.linux.dk *
* madsen@sjovedyr.dk * Linux, Ruby, PHP and SQL *

Anders K. Madsen (18-08-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 18-08-03 19:09

On Mon, 18 Aug 2003 19:03:33 +0200
"Lone" <ingen@email.dk> wrote:

> > preg_match_all("/([0-9]{1,4})\s?\-\s?([0-9]{1,4})/", $str, $matches);
> > print_r($matches);
> >
> > Håber du kan bruge det til noget og at det virker.
>
> Super-duper. Det virker perfekt. Tak for hjælpen!
>

Lækkert. Det var så lidt.

> Er der i øvrigt nogen som kender en god 'reference manual' eller anden
> slå-op-ting der handler om regexp? Jeg sidder og bøvler med phpfreaks's
> tutorial, men det ville være rart hurtigt at kunne slå op hvad f.eks. \s?
> betyder.
>

Well, så længe det gælder Perl Compatible Regular Expressions (PCRE) i PHP, så
kan du kigge på http://php.net/pcre,
http://dk.php.net/manual/en/pcre.pattern.modifiers.php og
http://dk.php.net/manual/en/pcre.pattern.syntax.php
Disse gælder for bl.a. preg_match(), preg_replace(), preg_grep() o.s.v.
Ellers kan du sikkert finde en guide til Perl-regexps på google.

Ellers er der også lidt på http://www.webcafe.dk/tipsogtricks/php/regex..html,
men det dækker kun de normale POSIX-lignende regexps, som bruges i ereg(),
ereg_replace(), split() o.s.v.

\s betyder en hvilken som helst whitespace karakter... Så du kan også bruge
f.eks. en tabulator.

Mvh.
   Madsen

--
* Anders K. Madsen * http://lillesvin.linux.dk *
* madsen@sjovedyr.dk * Linux, Ruby, PHP and SQL *

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

Månedens bedste
Årets bedste
Sidste års bedste