S: RegExp

S: RegExp

am 23.01.2007 11:45:55 von stefan.glaesser

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

Re: S: RegExp

am 23.01.2007 12:12:52 von Helmut Wollmersdorfer

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

Re: S: RegExp

am 23.01.2007 12:29:19 von Mirco Wahab

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.

Re: S: RegExp

am 23.01.2007 12:36:53 von Mirco Wahab

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.

Re: S: RegExp

am 23.01.2007 13:08:51 von Frank Seitz

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

Re: S: RegExp

am 23.01.2007 13:52:53 von Mirco Wahab

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

Re: S: RegExp

am 23.01.2007 14:03:50 von Frank Seitz

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

Re: S: RegExp

am 23.01.2007 14:09:38 von Mirco Wahab

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

Re: S: RegExp

am 23.01.2007 16:23:49 von Frank Seitz

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