2009-06-26 18 views
5

MSVS: Gdzie regex ?

Mam kod, który próbuję dopasować z wyrażenia regularnego w MSVS 2008, ale nie mogę dowiedzieć się regex dla niego. Weźmy klasyczny przykład:Visual Studio Regex "?"

colou?r 

... co jest wyrażeniem regularnym dopasowującym color lub colour. Nie pasuje to ani do MSVS. Nawiązując do pliku pomocy, nie mogę znaleźć ?.

Nie byłoby to nic wielkiego - może to być emulowane z naprzemiennie:

colo(u|)r 

Jednak uzyskać ... co to jest ... nie „zgrupowane wyrażenie brakuje«)».” . Dziwnie, MSVS ma tych alternatywnych grup (nie jestem pewien, dlaczego ...) z klamrami „Błąd składni w strukturze”

colo{u|}r 

Który daje mi zupełnie inny błąd ... co, Nie widzę jednego. Zasadniczo, jak zrobić ?? Moje aktualne dane wejściowe nie są tak proste jak kolor/kolor, w przeciwnym razie po prostu sfałszowałem to przy pomocy (color|colour). Przypuszczam, że może to udawać, ale jest to dość rozwlekły sposób.


Spróbujmy naprzemiennie potem ...

Ok, ja wciąż nie mogę tego zrobić, nawet z naprzemiennie. Mam następujące dwa wyrażenia regularne:

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

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

Te dwa pasujące do siebie dwa zestawy wierszy odpowiadają osobno tekstowi. (Pierwsze mecze część linii pasujących drugi.)

Mój wkład jest linie informacji waluta:

 
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) 

(Są to karty, na przykład między euro WIR i (waluta lokalna), ale nie są one zawsze tam.)

Logicznie rzecz biorąc, powinno wynikać, że aby połączyć

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

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

..you dostać ... ^ [AZ] + \ t [0-9] + \ t ([^ \ t] + | [^ \ t] + \ t [^ \ t] +) ... co wydaje się być równoważne do drugiego wyrażenia w pierwszym zbiorze.

+0

Co masz na myśli przez wyrażenie regularne w Visual Studio? W jakim języku piszesz? –

+2

@John Rasch: Ma na myśli w oknie Znajdź/Zamień w Visual Studio. – Welbog

+0

@Welbog - w porządku, który ma sens teraz –

Odpowiedz

4

Nasz własny Jeff Atwood napisał o tym jakiś czas temu. Zasadniczo implementacja regex Visual Studio jest dość niestandardowa i nie ma prostego sposobu robienia tego, co zwykle robi się z "?". Będziesz musiał użyć wyrażenia {colour|color}.

+0

Dzięki ... wypróbowałem to na przemian, zobacz zmiany. – Thanatos

0

Wyrażenia regularne w programie Visual Studio find nie obsługują?. Zobacz numer reference na stronie MSDN.Ty najlepiej jest prawdopodobnie postać naprzemienne

+0

Ten artykuł wydaje się być taki sam, jak plik pomocy, który, jak już wspomniałem, nie jest wcale pomocny. – Thanatos

0

to działa:

colo(u)|()r 

dla prawdziwego przykład, będzie to pasuje każdym wierszu:

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

Myślę, że chodziło Ci o "colo (u |()) r". twoje pierwotne zapytanie brzmi "dopasuj" colou "lub" r "" – Aaron

+0

Obie nasze metody działają dokładnie tak samo w Visual Studio. Spróbuj sam. – Greg

0

Próbowałeś z najdłuższym wspólnej ścieżce Pod dobrze?

Na przykład, dla barwy i koloru byłoby:

colo(ur|r) 

i dla wyrażeń regularnych 2 byłoby:

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

Chociaż nie udokumentowano, odkryłem, że ciąg "()" dopasuje pusty ciąg. Na przykład:

colo(u|())r 

Podobnie, wypróbować

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

Z tym ostatnim przypadku, należy umieścić alternatywną pustymi ostatni łańcuch, aby uniknąć częściowego mecz, lub upewnij się, aby dołączać token końca linii "$".