2009-06-26 4 views
5

MSVS: Wo die Regex ?

I-Code haben ist, dass ich versuche, mit einem regulären Ausdruck in MSVS 2008 zu entsprechen, aber ich kann die Regex für es nicht herausgefunden. Nehmen Sie das klassische Beispiel:Visual Studio Regex '?'

colou?r 

..., die ein regulärer Ausdruck ist, die color oder colour entspricht. Dies entspricht weder in MSVS. Mit Verweis auf die Hilfedatei kann ich ? nicht finden.

Dies wäre keine große Sache sein - es kann mit Wechsel emuliert werden:

colo(u|)r 

Aber ich bekommen ... was es ist ... nicht „gruppierte Ausdruck fehlt‚)‘.“ . Merkwürdig ist, hat MSVS diese alternativen Gruppen (Ich bin nicht wirklich sicher, warum ...) mit geschweiften Klammern: „Syntaxfehler im Muster“

colo{u|}r 

die mir die ganz anderen Fehler gibt ... die, Ich sehe keinen. Wie kann ich ?? Meine tatsächliche Eingabe ist nicht so einfach wie Farbe/Farbe, sonst würde ich es nur mit (color|colour) vortäuschen. Ich nehme an, ich könnte es vortäuschen, aber es ist eine stumpfsinnige Art, das zu tun.


versuchen dann Wechsel Lassen Sie ...

Ok, ich es immer noch nicht möglich ist, auch bei Wechsel. Ich habe die folgenden zwei Regexes:

 
^[A-Z]+\t[0-9]+\t[^\t]+ 

^[A-Z]+\t[0-9]+\t[^\t]+\t[^\t]+ 

Diese beiden passen zwei Sätze von Linien übereinstimmen, individuell, mein Text. (Die erste entspricht ein Teil der Linien, die die zweite übereinstimmen.)

Meine Eingabe ist Linien Währung:

 
BZD 084 Belize dollar 
CAD 124 Canadian dollar 
CDF 976 Franc Congolais 
CHE 947 WIR euro (complementary currency) 
CHF 756 Swiss franc 
CHW 948 WIR franc (complementary currency) 
CLF 990 Unidad de Fomento (funds code) 

(Es gibt Tabs, beispielsweise zwischen WIR Euro und (Komplementärwährung), aber sie sind nicht immer da.)

Logischerweise sollte es folgen, dass

 
^[A-Z]+\t[0-9]+\t[^\t]+ 

^[A-Z]+\t[0-9]+\t[^\t]+\t[^\t]+ 

zu kombinieren ..you zu bekommen ... ^ [AZ] + \ t [0-9] + \ t ([^ \ t] + | [^ \ t] + \ t [^ \ t] +) ... was irgendwie äquivalent erscheint zu dem zweiten Ausdruck in der ersten Menge.

+0

Was meinst du mit Regex in Visual Studio? In welcher Sprache schreiben Sie es? –

+2

@John Rasch: Er meint in Visual Studio das Suchen/Ersetzen-Fenster. – Welbog

+0

@Welbog - in Ordnung, das macht jetzt Sinn –

Antwort

4

Unser eigenes Jeff Atwood schrieb darüber eine Weile zurück. Im Grunde genommen ist die Regex-Implementierung von Visual Studio ziemlich nicht standardisiert und es gibt keine direkte Möglichkeit, das zu tun, was normalerweise mit '?' gemacht wird. Sie müssen Ihren Ausdruck {colour|color} verwenden.

+0

Danke ... versuchte es mit Wechsel, siehe Bearbeitungen. – Thanatos

0

Die regulären Ausdrücke in Visual Studio finden keine Unterstützung?. Siehe reference bei MSDN.Sie beste Wette ist wahrscheinlich der Wechsel Charakter

+0

Dieser Artikel scheint der Hilfe-Datei zu entsprechen, die, wie ich bereits erwähnt habe, überhaupt keine Hilfe bietet. – Thanatos

0

Dies funktioniert:

colo(u)|()r 

für Ihr reales Beispiel, das wird jede Zeile entsprechen:

^[A-Z]+:b[0-9]+:b[^\t]+(\t[^\t]+)|() 
+1

ich denke du meintest "colo (u |()) r". Ihre ursprüngliche Abfrage lautet "match 'colou' or 'r'" – Aaron

+0

Beide Methoden funktionieren in Visual Studio identisch. Versuch es selber. – Greg

0

Haben Sie versucht, mit dem längsten gemeinsamen Weg bei der Recht?

Zum Beispiel für Farbe und Farbe wäre es:

colo(ur|r) 

und für zwei reguläre Ausdrücke wäre es:

^[A-Z]+\t[0-9]+\t{[^\t]+|[^\t]+\t[^\t]+} 
1

Während nicht dokumentiert, habe ich, dass die Zeichenfolge gefunden "()" entspricht einer leeren Zeichenfolge. Zum Beispiel:

colo(u|())r 

Ebenso versuchen,

^[A-Z]+\t[0-9]+\t{[^\t]+(\t+[^\t]+|())} 

Mit diesem letzten Fall sicher, dass der leeren String alternativen zuletzt zu vermeiden setzen, um eine teilweise Übereinstimmung bekommen, oder stellen Sie sicher auf einem tack End-of-Line-Token '$' auch.

Verwandte Themen