Schrift
[thread]12870[/thread]

"Abkürzungen" in regexes



<< >> 3 Einträge, 1 Seite
FoolAck
 2008-12-07 13:17
#116901 #116901
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Moin Perl Community und gleich mal sorry: mir fiel kein besserer Titel ein.

Das Problem: beim Vim zum Beispiel kann man ja statt 'quit' auch einfach 'q', 'qu' oder 'qui' eingeben (das gilt für alle Kommandos, insofern sie dann eindeutig sind.)

Wollt mal fragen ob es da mit (perls) regulären Ausdrücken ne einfachere Lösung gibt, als diese hier:
Code (perl): (dl )
^q(u(i(t)?)?)?$

(Schon klar, dass das (?: ... ) Konstrukt besser wäre, aber der Lesbarkeit zu Liebe hab ichs mal weggelassen.)
Es würde mir auch noch diese Möglichkeit einfallen:
Code (perl): (dl )
^(quit|qui|qu|q)$


Beides irgendwie nicht das Wahre. Und bei längeren Wörtern würde es schnell ziemlich lang und unübersichtlich werden. Gibts da irgendne Möglichkeit, die ich übersehen habe?
Also ich mein jetzt nicht das Vervollständigungsproblem als Gesamtkomplex, sondern nur diesen spezifischen Fall, wo man quasi hardgecodet festlegt, ab wo ein Ausdruck eindeutig ist (und der Rest dann optional).

Bei einem richtigen Vervollständigungssystem würde man generell anders rangehen.
betterworld
 2008-12-07 14:19
#116906 #116906
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Mach es doch andersrum:

Statt
Code: (dl )
$eingabe =~ /^q(u(i(t)?)?)?$/;

einfach
Code: (dl )
'quit' =~ /^\Q$eingabe/

Oder gleich mit index oder substr arbeiten.
LanX-
 2008-12-07 14:55
#116907 #116907
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
ich würde den eindeutigen Teil greifen und im zwoten Schritt die Korrektheit des Rests prüfen:

also
/^(q)\w*$/

und dann

index($full{$1}, $&);

überprüfen.

also $full{q}="quit";

hätte auch den Vorteil dass du es in ner Schleife über den Hash realisieren könntest, mit den keys als eindeutigen Teil in der Regex und den values im index.

oder du baust eine große regex mit
$abr="(".join "|",keys %full.")";
/^$abr\w*$/;

so in der art...
<< >> 3 Einträge, 1 Seite



View all threads created 2008-12-07 13:17.