S: RegExp

Hallo,

ich suche eine Regexp, die gewährleistet, dass nur Zeichenketten mit
mindestens 3 Buchstaben weitergereicht werden. Alle anderen Zeichenketten
sollen verworfen bzw. vorher entsprechend gesäubert werden.

Zeichenketten erlaubt:
abc
abc abc heinz* +0815

Zeichenketten nicht erlaubt:
ab*
+a*
+ab
abc *ac -> filtern nach: abc


Hat jemand sowas parat? Ich hab schon rumprobiert, komme aber nicht wirklich
drauf.


Gruß,
Stefan
stefan.glaesser [ Di, 23 Januar 2007 11:45 ] [ ID #1605651 ]

Re: S: RegExp

Stefan Gläßer wrote:

> ich suche eine Regexp, die gewährleistet, dass nur Zeichenketten mit
> mindestens 3 Buchstaben weitergereicht werden. Alle anderen
> Zeichenketten sollen verworfen bzw. vorher entsprechend gesäubert werden.

> Zeichenketten erlaubt:
> abc
> abc abc heinz* +0815

Da geht nicht wirklich hervor, was Du willst. '0815' sind z.B. Ziffern
und nicht Buchstaben. Also nehme ich mal an, Du meinst alfanumerisch,
was inklusive '_' = '\w' ist, und dass mindestens 3 \w hintereinander
vorkommen dürfen, drumherum beliebiges ausser Space:

\S*\w{3,}\S*

Statt '\w' verwende ich halt lieber die genaueren Definitionen aus
'perldoc perlunicode'.

Helmut Wollmersdorfer
Helmut Wollmersdorfer [ Di, 23 Januar 2007 12:12 ] [ ID #1605652 ]

Re: S: RegExp

Stefan Gläßer wrote:
> ich suche eine Regexp, die gewährleistet, dass nur Zeichenketten mit
> mindestens 3 Buchstaben weitergereicht werden. Alle anderen
> Zeichenketten sollen verworfen bzw. vorher entsprechend gesäubert werden.
>
> Hat jemand sowas parat? Ich hab schon rumprobiert, komme aber nicht
> wirklich drauf.

Anhand Deiner "Spezifikation" würde ich
tippen: \b[A-z]{3,}
so etwa wie in:

use strict;
use warnings;

my $zeuch = q'
abc
abc abc heinz* +0815
ab*
+a*
+ab
abc *ac
';

open my $fh, '<', \$zeuch;
while(<$fh>) {
chomp;
print "[$_] ==> ",
(join ' ', grep /\b[A-z]{3,}/g, split),
"\n"
}

Viele Grüße

M.
Mirco Wahab [ Di, 23 Januar 2007 12:29 ] [ ID #1605653 ]

Re: S: RegExp

Stefan Gläßer wrote:
> ich suche eine Regexp, die gewährleistet, dass nur Zeichenketten mit
> mindestens 3 Buchstaben weitergereicht werden. Alle anderen
> Zeichenketten sollen verworfen bzw. vorher entsprechend gesäubert werden.
>
> Hat jemand sowas parat? Ich hab schon rumprobiert, komme aber nicht
> wirklich drauf.

Anhand Deiner "Spezifikation" würde ich
tippen: /[A-z0-9]{3,}/
so etwa wie in:

...
my $zeuch = q'
abc
abc abc heinz* +0815
ab*
+a*
+ab
abc *ac
';

open my $fh, '<', \$zeuch;
while(<$fh>) {
chomp;
print "[$_] ==> ",
(join ' ', grep /[A-z0-9]{3,}/g, split),
"\n"
}
...

liefert:

[abc] ==> abc
[abc abc heinz* +0815] ==> abc abc heinz* +0815
[ab*] ==>
[+a*] ==>
[+ab] ==>
[abc *ac] ==> abc

Viele Grüße

M.
Mirco Wahab [ Di, 23 Januar 2007 12:36 ] [ ID #1605654 ]

Re: S: RegExp

Mirco Wahab wrote:
> Stefan Gläßer wrote:
>
>>ich suche eine Regexp, die gewährleistet, dass nur Zeichenketten mit
>>mindestens 3 Buchstaben weitergereicht werden. Alle anderen
>>Zeichenketten sollen verworfen bzw. vorher entsprechend gesäubert werden.
>>
>>Hat jemand sowas parat? Ich hab schon rumprobiert, komme aber nicht
>>wirklich drauf.
>
> Anhand Deiner "Spezifikation" würde ich
> tippen: /[A-z0-9]{3,}/

Seit wann sind Ziffern Buchstaben? In den Range von A-z
fallen außerdem: [ \ ] ^ _ `

Ich lese aus der Beschreibung des OP eher sowas heraus:

($str) = $str =~ /([[:alpha:]]{3,})/;

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Di, 23 Januar 2007 13:08 ] [ ID #1605655 ]

Re: S: RegExp

Frank Seitz wrote:
> Mirco Wahab wrote:
>> Anhand Deiner "Spezifikation" würde ich
>> tippen: /[A-z0-9]{3,}/
>
> Seit wann sind Ziffern Buchstaben? In den Range von A-z
> fallen außerdem: [ \ ] ^ _ `
>
> Ich lese aus der Beschreibung des OP eher sowas heraus:
>
> ($str) = $str =~ /([[:alpha:]]{3,})/;
>

Dachte ich ursprünglich auch, aber bei einer
"näheren Betrachtung" des Ausgangspostings
findet sich:
>>> Zeichenketten erlaubt:
>>> ...
>>> abc abc heinz* +0815
^
----------------------|

Ich interpretiere daher: "mindestens 3 Buchstaben"
als [A-z0-9], einfach aus "heuristischen"
Überlegungen ;-)

Viele Grüße

Mirco
Mirco Wahab [ Di, 23 Januar 2007 13:52 ] [ ID #1605656 ]

Re: S: RegExp

Mirco Wahab wrote:
> Frank Seitz wrote:
>>Mirco Wahab wrote:
>>
>>>Anhand Deiner "Spezifikation" würde ich
>>>tippen: /[A-z0-9]{3,}/
>>
>>Seit wann sind Ziffern Buchstaben? In den Range von A-z
>>fallen außerdem: [ \ ] ^ _ `
>>
>>Ich lese aus der Beschreibung des OP eher sowas heraus:
>>
>> ($str) = $str =~ /([[:alpha:]]{3,})/;
>
> Dachte ich ursprünglich auch, aber bei einer
> "näheren Betrachtung" des Ausgangspostings
> findet sich:
> >>> Zeichenketten erlaubt:
> >>> ...
> >>> abc abc heinz* +0815
> ^
> ----------------------|
>
> Ich interpretiere daher: "mindestens 3 Buchstaben"
> als [A-z0-9], einfach aus "heuristischen"
> Überlegungen ;-)

Verstehe ich nicht, die mindestens drei Buchstaben
befinden sich doch vorne in der Zeichenkette.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Di, 23 Januar 2007 14:03 ] [ ID #1605657 ]

Re: S: RegExp

Frank Seitz wrote:
> Verstehe ich nicht, die mindestens drei Buchstaben
> befinden sich doch vorne in der Zeichenkette.

Also ich hab das so verstanden:

>>> ...
>>> dass nur Zeichenketten mit mindestens 3 Buchstaben
>>> weitergereicht werden. Alle anderen Zeichenketten
>>> sollen verworfen bzw. vorher entsprechend gesäubert
>>> werden
>>> ...

Ein "string" enthält demnach "mehrere Zeichenketten",
von denen einige "weitergereicht" werden sollen.

Welche das zum Bleistift sein sollen, schreibt er dann:

>>> Zeichenketten erlaubt:
>>> abc abc heinz* +0815

und ausserdem soll "gefiltert" werden:

>>> Zeichenketten nicht erlaubt:
>>> abc *ac -> filtern nach: abc

(ich kann auch total danebenliegen ...)

Viele Grüße

Mirco
Mirco Wahab [ Di, 23 Januar 2007 14:09 ] [ ID #1605658 ]

Re: S: RegExp

Mirco Wahab wrote:

> (ich kann auch total danebenliegen ...)

Ich auch.
Ich hab's anders interpretiert, aber letztlich
ist die Beschreibung zu ungenau.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Di, 23 Januar 2007 16:23 ] [ ID #1605659 ]
Perl » de.comp.lang.perl.misc » S: RegExp

Vorheriges Thema: Mein Fehler bei HTML::Parser Beispiel von Renee Baecker
Nächstes Thema: Lexikalische Variable