2017-03-08 2 views
0

Ich möchte Logische Operatoren von OoRexx mit Regex in einer .CSON-Datei erfassen, weil ich Syntax-Hervorhebung von ooRexx mit dem Atom-Editor unterstützen möchte. Das sind die Betreiber Ich versuche zu decken:Wie Regex mit Cson verwenden

>= <= \> \<\=>< <> == \== // && || ** ¬> ¬< ¬= ¬== >> << >>= \<< ¬<< \>> ¬>> <<=

Und das ist der regex Teil in der cson Datei:

'match': '\\+ | - | [\\\\] | \\/ | % | \\* | \\| | & |=|¬|>|<| 
>= | <= | ([\\\\]>) | ([\\\\]<) | ([\\\\]=) | >< | <> | == | ([\\\\]==) | 
\\/\\/ | && | \\|\\| | \\*\\* | ¬> | ¬< | ¬= | ¬== | >> | << | >>= | ([\\\\]<<) | ¬<< | 
([\\\\]>>) | ¬>> | <<=' 

ich mit den Schrägstrichen (vorwärts und rückwärts) und auch bin zu kämpfen mit dem Doppel ** Mein Wissen über Regex ist sehr einfach, um es schön zu sagen. Gibt es jemanden, der mir dabei helfen kann?

+0

Versuchen Sie, Backslashes nur einmal zu umgehen, so dass jedes '\ 'im Operator' \\ 'in der Regex wird. Sie sollten auch niemals '[]' brauchen. Geben Sie außerdem an, um welchen tatsächlichen Fehler es sich handelt. –

Antwort

0

Sie haben Leerzeichen um die Pipe-Balken: Diese Leerzeichen werden im regulären Ausdruck gezählt. Wenn Sie also etwas wie | \*\* | schreiben, werden die doppelten Sterne gefangen, aber nur, wenn sie von einem Leerzeichen auf jeder Seite umgeben sind, und nicht, wenn sie an einem Wort oder am Anfang/Ende einer Zeile angebracht sind. Das gleiche Problem mit den Schrägstrichen - Ich habe es getestet und es scheint sie für mich zu fangen, aber nur so lange, wie sich Ihre Schrägstriche (oder Sternchen) zwischen zwei Leerzeichen befinden.

Ein paar andere Dinge im Auge zu behalten:

  • Sie sollten nicht die eckigen Klammern um Schrägstriche müssen; sie sind nützlich, um Klassen von möglichen Zeichen zur Verfügung zu stellen. Zum Beispiel wird [<>]= beide >= und <= fangen. Schreiben [\\] entspricht dem Schreiben \\ direkt, weil \\ aufgrund des ersten escaping Backslash als einzelnes Zeichen zählt. In ähnlicher Weise werden Ihre Klammern hier nicht verwendet; siehe grouping.
  • Denken Sie auch an repetition operators wie + und *. So wird \\>+ beide \> und \>> fangen.
  • Schließlich hilft Ihnen das Fragezeichen, Wiederholungen zu vermeiden, indem Sie das vorherige Zeichen (oder eine Gruppe von Zeichen in eckigen Klammern) als optional markieren. ==? wird sowohl = als auch == entsprechen.

können Sie Gruppe zusammen eine Menge Ihre Aussagen mit diesen drei Tricks kombiniert ... Ich werde diese Übung Ihnen überlassen!

Ein weiterer Hinweis, wenn lange reguläre Ausdrücke zu entwickeln - einen Tester wie Regex101 oder ähnliches mit einer Testdatei verwenden, um Ihre Änderungen in Echtzeit zu sehen, und Debugger wie Regexper helfen Ihnen zu verstehen, wie Sie Ihren regulärer Ausdruck analysiert wird.

+0

Vielen Dank. Ich war mir nicht bewusst, dass die Räume Teil des Regex-Musters sind. Jetzt habe ich es funktioniert. – Atlantaner

+0

@Atlantaner super! Wenn das für Sie funktioniert hat, [bitte die Frage als gelöst markieren] (http://stackoverflow.com/help/someone-answers). – Victor