Schrift
[thread]11563[/thread]

RegEx: Alle Zahlen < 500 aus einem String



<< >> 8 Einträge, 1 Seite
pktm
 2008-04-03 02:06
#107774 #107774
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich suche eine RegEx, die mir aus einer Zeichenkette alle Zahlen heraussucht, die kleiner 500 sind.
Mein Ansatz:
Code: (dl )
1
2
my $tree = '[0,[[505,[[500,[[1],[2]]],[504,[[3],[503,[[501,[[4],[5]]],[502,[[6 499],[507,[[7],[8]]]]]]]]]]],[9]]]';
my @terminal_ids = ($tree =~ m/[^\d]([1-4]?[0-9]{1,2}\d)[^\d]/g);


Das findet aber die 499 nicht. Wenn ich vor die 499 ein "a" schriebe wird sie gefunden. Aber das Leerzeichen ist doch in der Klasse "keine Ziffer = [^\]" enthalten oder?

Grüße, pktm

EDIT: automatentheoretische Überlegung: Der linke Kontext [^\d] von der 499 wurde bereits beim Auslesen der 6 verbaucht? Kann man das abstellen?
http://www.intergastro-service.de (mein erstes CMS :) )
murphy
 2008-04-03 04:25
#107775 #107775
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich würde mal m/(?<=\D)(\d{1,2}|[0-4]\d{2})(?=\D)/g probieren...
When C++ is your hammer, every problem looks like your thumb.
seth
 2008-04-03 12:02
#107788 #107788
User since
2008-03-29
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
gudn tach!

passt in diesem fall, da wohl immer klammern am stringanfang und -ende stehen.
ansonsten koennte man das durch eine kleine aenderung auch noch erschlagen:

m/(?<!\d)(\d{1,2}|[0-4]\d{2})(?!\d)/g

prost
seth
moritz
 2008-04-03 12:53
#107791 #107791
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Noch eine ganz allgemeine lösung:

Code (perl): (dl )
m/\b(\d+)\b(??{ $^N < 500 ? "" : "(?!)"})/


(ungetestet). Geht mit beliebigen anderen Zahlen genauso gut ;-)

Update: $^N, nicht $^R. Danke Sid.
sid burn
 2008-04-03 13:39
#107792 #107792
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
@moritz
Du meintest wohl eher $^N ? ;)

Ansonsten ist das Beispiel falsch "\d+" ist nicht gerade Optimal um ne Zahl zu extrahieren. ähem habe dazu erst vor kurzem was geschrieben.

http://board.perl-community.de/thread/11526/startW...

Ungetestet:
Code: (dl )
1
2
use Regexp::Common;
my @numbers = grep { $_ < 500 } m/$RE{num}{real}/g;
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
seth
 2008-04-03 14:27
#107799 #107799
User since
2008-03-29
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
gudn tach!

sid burn+2008-04-03 11:39:11--
Ansonsten ist das Beispiel falsch "\d+" ist nicht gerade Optimal um ne Zahl zu extrahieren. ähem habe dazu erst vor kurzem was geschrieben.

http://board.perl-community.de/thread/11526/startW...


klar, rationale zahlen sind schwerer zu fassen, wie du in dem thread hervorragend demonstriert hast. wenn aber nur natuerliche zahlen vorkommen und nur unter diesen nach bestimmten gesucht werden soll, ist
Code: (dl )
\d+
durchaus ok, wenn man fuehrende nullen erlaubt oder ebenfalls a priori ausschliessen kann.

prost
seth
pktm
 2008-04-03 18:49
#107823 #107823
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ja, ich suche nur ganze Zahlen, und von denen auch nur positive und ich kann führende Nullen a priori ausschließen.

Was macht denn "?<!" ? In welcher manpage kann ich das nachschlagen?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2008-04-03 19:05
#107826 #107826
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich empfehle Dir perlretut unter "Looking-ahead-and-looking-behind"... Und http://regenechsen.de!/
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 8 Einträge, 1 Seite



View all threads created 2008-04-03 02:06.