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

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Regexp matches til array
Fra : Anders Wegge Jakobse~


Dato : 18-05-05 18:37


Jeg er på jagt i en større tekst efter forkortelser med et ukorrekt
jefalds-s. Det vil sige UNESCOs, der skulle være UNESCO's. Jeg har
strikket et regexp sammen, der næsten matcher min definition på
problemet.

Men det jeg ikke rigtigt kan gennemskue, er hvordan (om?) jeg kan
pakke en parantes udenom min regexp, og få hentet samtlige matches på
en gang.

Altså med en regexp som '\W([A-ZÆØÅ]*)s\W' og en streng
'FOOs BARs bQUXs FOOs'

Ville jeg gerne have resultaterme FOO, BAR og FOO.

Kan det lade sig gøre på en nem måde?

--
/Wegge
Min holdning til Usenet - <http://wiki.wegge.dk/Usenet>
Min weblog - <http://blog.wegge.dk/>

 
 
Thorbjoern Ravn Ande~ (18-05-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 18-05-05 18:42

Anders Wegge Jakobsen <wegge@wegge.dk> writes:

> Men det jeg ikke rigtigt kan gennemskue, er hvordan (om?) jeg kan
> pakke en parantes udenom min regexp, og få hentet samtlige matches på
> en gang.

Hvorfor splitter du ikke bare op i ord først og så kigger på hver
linie for sig?

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn/

Anders Wegge Jakobse~ (18-05-2005)
Kommentar
Fra : Anders Wegge Jakobse~


Dato : 18-05-05 18:57

"Thorbjoern" == Thorbjoern Ravn Andersen <nospam0000@c.dk> writes:

> Anders Wegge Jakobsen <wegge@wegge.dk> writes:
>> Men det jeg ikke rigtigt kan gennemskue, er hvordan (om?) jeg kan
>> pakke en parantes udenom min regexp, og få hentet samtlige matches på
>> en gang.

> Hvorfor splitter du ikke bare op i ord først og så kigger på hver
> linie for sig?

Ja, nu du siger det.

--
/Wegge
Min holdning til Usenet - <http://wiki.wegge.dk/Usenet>
Min weblog - <http://blog.wegge.dk/>

Peter Makholm (18-05-2005)
Kommentar
Fra : Peter Makholm


Dato : 18-05-05 18:56

Anders Wegge Jakobsen <wegge@wegge.dk> writes:

> Jeg er på jagt i en større tekst efter forkortelser med et ukorrekt
> jefalds-s. Det vil sige UNESCOs, der skulle være UNESCO's.

Det vil da være dumt. Efter retskrivningsreglerne kan forkortelser
uden forkortelsespunktum der udtales som egentlige ord bøjes både med
og uden apostrof (§6 i RO2001).

Som eksempel kan bruges NATO som i ejefald kan hedde Natos, Nato's,
NATOs eller NATO's.

> Altså med en regexp som '\W([A-ZÆØÅ]*)s\W' og en streng
> 'FOOs BARs bQUXs FOOs'

Følgende ser ud til at opfylde dine krav:

perl -nle '@hits = /\b([A-Z]*)s\b/g; print join",",@hits'

--
Peter Makholm | If you can't do any damage as root, are you still
peter@makholm.net | really root?
http://hacking.dk | -- Derek Gladding about SELinux

Peter Makholm (18-05-2005)
Kommentar
Fra : Peter Makholm


Dato : 18-05-05 19:02

Peter Makholm <peter@makholm.net> writes:

>> Altså med en regexp som '\W([A-ZÆØÅ]*)s\W' og en streng
>> 'FOOs BARs bQUXs FOOs'
>
> Følgende ser ud til at opfylde dine krav:
>
> perl -nle '@hits = /\b([A-Z]*)s\b/g; print join",",@hits'

Der er to pointer. Den korte er at /g får perl til at finde alle
matches.

Forskellen mellem \b og \W er at \b matcher lige før ordet mens \W
matcher tegnet før ordet. Det er relevant når du skal have fat i to
ord lige efter hinanden som der kun er et tegn imellem. Så vil dit
mellemrumstegn blive fanget af det andet \W i første runde og så er
der ikke noget det første \W kan matche på i anden runde.

--
Peter Makholm | What if:
peter@makholm.net | Tanenbaum had convinced Linus that his
http://hacking.dk | operating system really was obsolete

Anders Wegge Jakobse~ (18-05-2005)
Kommentar
Fra : Anders Wegge Jakobse~


Dato : 18-05-05 19:04

"Peter" == Peter Makholm <peter@makholm.net> writes:

> Anders Wegge Jakobsen <wegge@wegge.dk> writes:
>> Jeg er på jagt i en større tekst efter forkortelser med et ukorrekt
>> jefalds-s. Det vil sige UNESCOs, der skulle være UNESCO's.

> Det vil da være dumt. Efter retskrivningsreglerne kan forkortelser
> uden forkortelsespunktum der udtales som egentlige ord bøjes både
> med og uden apostrof (§6 i RO2001).

Det er også lidt dumt at have en lemfældig blanding af UNESCO's og
UNESCOs spredt rundt i teksten.

> Som eksempel kan bruges NATO som i ejefald kan hedde Natos, Nato's,
> NATOs eller NATO's.

Nu er der så også masser af forkortelser der ikke udtales som
almindelige ord, og der mener jeg at 's er den eneste korrekte form.

>> Altså med en regexp som '\W([A-ZÆØÅ]*)s\W' og en streng 'FOOs BARs
>> bQUXs FOOs'

> Følgende ser ud til at opfylde dine krav:

> perl -nle '@hits = /\b([A-Z]*)s\b/g; print join",",@hits'

Det gør den. Jeg takker og bukker.

... gg kaster mig over problemet med at få lavet en regexp der også
matcher i tilfælde som FOO-BARs og FOO/BARs.

--
/Wegge
Min holdning til Usenet - <http://wiki.wegge.dk/Usenet>
Min weblog - <http://blog.wegge.dk/>

Henrik Christian Gro~ (19-05-2005)
Kommentar
Fra : Henrik Christian Gro~


Dato : 19-05-05 09:54

Anders Wegge Jakobsen <wegge@wegge.dk> writes:

> "Peter" == Peter Makholm <peter@makholm.net> writes:
>
> > Anders Wegge Jakobsen <wegge@wegge.dk> writes:
> >> Jeg er på jagt i en større tekst efter forkortelser med et ukorrekt
> >> jefalds-s. Det vil sige UNESCOs, der skulle være UNESCO's.
>
> > Det vil da være dumt. Efter retskrivningsreglerne kan forkortelser
> > uden forkortelsespunktum der udtales som egentlige ord bøjes både
> > med og uden apostrof (§6 i RO2001).
>
> Det er også lidt dumt at have en lemfældig blanding af UNESCO's og
> UNESCOs spredt rundt i teksten.

Enig, men derfor er det stadig forkert at kalde det "et ukorrert
jefalds-s".

> > Som eksempel kan bruges NATO som i ejefald kan hedde Natos, Nato's,
> > NATOs eller NATO's.
>
> Nu er der så også masser af forkortelser der ikke udtales som
> almindelige ord, og der mener jeg at 's er den eneste korrekte form.

Det er det også.

> > Følgende ser ud til at opfylde dine krav:
>
> > perl -nle '@hits = /\b([A-Z]*)s\b/g; print join",",@hits'
>
> Det gør den. Jeg takker og bukker.
>
> ... gg kaster mig over problemet med at få lavet en regexp der også
> matcher i tilfælde som FOO-BARs og FOO/BARs.

perl -nle '@hits = /\b([A-Z/-]*s\b/g; print join",",@hits'

..Henrik

--
"Det er fundamentalt noget humanistisk vås, at der er noget,
der hedder blød matematik."
--- citat Henrik Jeppesen, dekan for det naturvidenskabelige fakultet

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

Månedens bedste
Årets bedste
Sidste års bedste