Wie finde ich das Symbol in Regexp?

9

Ich versuche, einen regulären Ausdruck zu erstellen, der mit Symbolen übereinstimmt, d. H. Funktionsnamen und dergleichen, gemäß den aktuellen Einstellungen für den Hauptmodus (wenn ich mich richtig erinnere, wird er als Syntaxtabelle bezeichnet). Nach einigen Nachforschungen habe ich diese nützlichen regulären Ausdrücke gefunden:

  • \_< stimmt mit dem Anfang eines Symbols überein

  • \_> Entspricht dem Ende eines Symbols

Jetzt denke ich, ich muss herausfinden, wie man einen symbolischen Charakter darstellt. Wir haben \wfür Wortbestandteile Zeichen, aber ich kann nichts für Symbole finden. Regexp, um mit Symbolen übereinzustimmen, sollte ungefähr so ​​aussehen (vorausgesetzt, dass \sÜbereinstimmungen mit Symbolbestandteilen übereinstimmen):

\_<\s+\_>

Vermisse ich etwas Wie passt man zu Symbolen?


Beachten Sie, dass das Abgleichen von Wörtern bei mir nicht funktioniert. Ein triviales Beispiel ist so etwas wie foo-barein Symbol im Emacs Lisp-Modus, aber kein Wort (weil -es kein Wortbestandteil ist).

Mark Karpov
quelle
3
Ich benutze normalerweise (re-search-forward "\\_<\\(?:\\sw\\|\\s_\\)+\\_>" nil t). Es funktioniert, aber ich frage mich, ob es einen kürzeren Weg gibt.
abo-abo
2
abo-abo: Hässlich wie es ist, AFAIK ist das, was Sie tun müssen, gegebene Symbole können sowohl symbolbestandteilige Zeichen als auch wortbestandteilige Zeichen enthalten. Sie sollten es eine Antwort machen. Mark, Sie sollten das Handbuch überprüfen, um zu sehen, was \statsächlich bedeutet, da es völlig anders ist als Ihre Annahme.
Phils
@phils, ich wusste nicht einmal, dass \sdas in Emacs regulären Ausdrücken eine Bedeutung hat, ich habe zum Beispiel nur dieses Symbol ausgewählt.
Mark Karpov
@Mark: Siehe das Elisp-Handbuch, Knoten Regexp Backslash .
Drew

Antworten:

7

Was ist los mit \_<.*?\_>?

fulvio ciriaco
quelle
Nichts, woran ich denken kann. Sehr sensibel.
Phils