RegEx gesucht
|
Seitenanfang |
| Hallo, ich suche eine Regexp, die folgende beiden Ausdrücke erkennt (irgendwas steht für \w*): l-irgendwas local p-irgendwas parameter Also wenn ein "l-" vorne steht, ist hinten ein "local" Pflicht, bei "p-" "parameter". "l-irgendwas parameter" soll also nicht erkannt werden. Zusätzlich soll danach der Teil "l-irgendwas" bzw. "p-irgendwas" in einem Subpattern gespeichert sein (ganz wichtig!). Ich bin daran inzwischen verzweifelt und hoffe auf Eure Hilfe!
Datum: 03.09.2005-16:09

|
re: RegEx gesucht
|
Seitenanfang |
| Hi, mal seh'n.
/([lp]-.*)\s(local|parameter)/
Jetzt wird, wenn ich nicht irre, p|l-irgendwas in $1 gespeichert.Das war aber nicht was wir wollten, denn bei l- ist local Pflicht. OK, ich denke da wirst zwei PatternMatchings aufeinander machen müssen.
my $l = undef; my $p = undef; $var =~ /(l-.*)\slocal/; $l = $1; $var =~ /(p-.*)\sparameter/; $p = $1;
-uw
Datum: 04.09.2005-00:54

|
re: RegEx gesucht
|
Seitenanfang |
| Danke für die Antwort. Deine Variante habe ich momentan implementiert und muss halt die gleiche Regex inzwischen 7 mal für die unterschiedlichen Fälle aufrufen. Und da der Rest des Ausdrucks recht aufwändig in der Auswertung ist (ist knapp 400 Zeichen lang), wollte ich die Performance optimieren, indem ich alles in einen Ausdruck packe. Dadurch müsste halt der Rest der Erkennung nur einmal und nicht 7 mal durchgeführt werden.
Datum: 04.09.2005-01:27

|
re: RegEx gesucht
|
Seitenanfang |
Dann versuch's mit Clustering, das muesste eigentlich funktionieren:
$var =~ /(?:(l-.*)\slocal|(p-.*)\sparameter)/;
Der Match muesste dann jeweils in $1 stehen.Siehe auch: perldoc perlre http://perldoc.perl.org/perlre.html#Extended-Patterns
Datum: 04.09.2005-10:11

|
re: RegEx gesucht
|
Seitenanfang |
| Da werden leider zwei Subpattern angelegt. Also der Inhalt von (p-.*) landet in $2.
Datum: 04.09.2005-10:27

|
re: RegEx gesucht
|
Seitenanfang |
| $var =~ /((?:l-.*)\slocal|(?:p-.*)\sparameter)/;
Datum: 05.09.2005-09:31

|
re: RegEx gesucht
|
Seitenanfang |
Da steckt dann leider der ganze Rest mit in dem Subpattern. Ich brauche aber nur das erste Wort (l- bzw p-irgendwas). Ich habe das jetzt gelöst, wie Cremator vorgeschlagen hat (gleich mit Ersetzung): $var =~ s/((l-.*)\slocal|(p-.*)\sparameter)/&buildRes()/e Die Funktion &buildRes wertet halt aus, welcher Pattern gefüllt ist und gibt ein entsprechendes Ergebnis zurück. Nicht schön, funktioniert aber.
Datum: 05.09.2005-22:05

|
re: RegEx gesucht
|
Seitenanfang |
| Hi Cremator, und da ist der Link, der mir dazu noch gefehlt hat. Super, danke. Sag mal, hättest Du nicht Lust an der Entwicklung eines Content Management Systems mitzuwirken? http://www.perlunity.de/cgi-bin/forum/forum_thread.cgi?tid=18697&mid=36209&fid=6&pn=0 -uw
Datum: 05.09.2005-13:15

|