Thema: Leerzeichen und mehrere Leerzeichen

servus,
ich nutze Perl
ich hab ein problem folgender string ist gegeben
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">aaaaa bbbbb cccc dddd      eeee ffff gggg hhhh[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">ich möchte jetzt "aaaaa bbbb cccc dddd" z.B. in $1 einfangen. und "eeee ffff gggg hhhh" in $2
das problem ist dabei das ich mittels [a-z ] ja gleich alles einfang...
die länge der wörter ist nicht fest sondern variabel.
irgendwie steh ich aufm schlauch... evtl. ist es zu schaffen wenn man das auf 2 regex verteilt.

grüssle & fetten segen
manu

Source Code Editor in Perl
http://proton-ce.sf.net

2

Re: Leerzeichen und mehrere Leerzeichen

moinmoin,

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s='a bb ccc dddd     eeeeee fffff gggg hhh';

$s=~/((w+s?)+)[s]+((w+s?)+)/;

print $1.'|'.$3.'|';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Das letzte Leerzeichen in $1 mußt Du bei Bedarf noch entfernen.

gruß

matho

3

Re: Leerzeichen und mehrere Leerzeichen

servus,
danke das wars
grüssle & fetten segen
manu

Source Code Editor in Perl
http://proton-ce.sf.net

4

Re: Leerzeichen und mehrere Leerzeichen

Ja, stimmt schon, das wesentliche wird erledigt.

Gestört hat mich allerdings das letzte Leerzeichen.

Eine allgemeinere Formulierung ist diese:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s='   WhrgRsG#f@rt sagte Obelix,  nachdem er sich V_E_R_L_I_E_B_T hatte  ';


$r='((?:S+(?:s(?=S))?)+)';

$s=~/^s*$rs{2,}$rs*$/;

print '|'.$1.'|'.$2.'|';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Es ist egal, ob  dem ersten Zeichen in $s beliebige Leerzeichen vorangehen
oder dem letzten welche folgen oder nicht, es muß nur Deine Struktur vorliegen:

Erster Teilstring, bestehend aus mindestens einem Zeichen, optional
beliebig vielen durch jeweils ein Leerzeichen getrennten Zeichengruppen,
getrennt durch mindestens zwo Leerzeichen vom zwoten Teilstring,
der genauso beschaffen ist wie der erste.

Ist diese Struktur gegeben, werden in $1 und $2 exact diese beiden
Teilstrings eingefangen (es sind also keine nachträglichen Bereinigungen
notwendig), ansonsten sind sowohl $1 als auch $2 leer -
was ich ganz praktisch finde bei der Suche nach etwaig fehlerhaften
Strukturen.

Soll heißen:
Im Extremfall kann

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s='a  b';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">oder

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s=' a  b ';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">oder auch

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s='       a        b      ';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">sein,
- aber nicht:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s='a b';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">oder auch:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s='a  ';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">oder last, but very not least:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">$s='a  bb  ccc';[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">gruß

matho
 
  <small>[ 18-06-2002, 23:28: Beitrag editiert von: matho ]</small>

5

Re: Leerzeichen und mehrere Leerzeichen

servus,
genau so wäre die perfekte lösung. allerdings ist es in meinem fall mit der ersten sogar etwas schneller da ich ja mit chomp das space wegbekomm und nicht eine komplexe regex anwenden muss. aber wie gesagt das ist nur in meinem fall so.

Hehe, ich bin noch nie auf die idee gekommen sich wiederholende teile mittels scalar einzubinden....
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">/^s*((?:S+(?:s(?=S))?)+)s{2,}((?:S+(?:s(?=S))?)+)s*$/[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">du benutzt hier die "extended pattern" damit hab ich mich noch nicht genauer beschäftigt...
ich hab mir mal die manpage von "?:" auf perldoc.com gelesen. da steckt auf jedenfall noch ne menge mehr macht drin... bzw. das ist wohl enes der dinge die die RegEx von perl so mächtig machen...
okay auf jedenfall ist es jetzt wohl an der zeit mich damit zu beschäftigen. mal sehen was der gute J.friedl dazu sagt *g*
grüssle & fetten segen
manu

Source Code Editor in Perl
http://proton-ce.sf.net

Re: Leerzeichen und mehrere Leerzeichen

OT: nur geil, dass der _ganze Dreck_ sowieso verschwinden wird. stichwort Perl 6. alles hübscher, besser, toller und mächtiger.

mfG whitehouse