2009-06-26 21 views
5

MSVS: Regex ?

ben MSVS 2008'de normal bir ifade ile eşleştirmek için çalışıyorum kod var, ama bunun için regex çözemiyorum bu. klasik bir örneği ele alalım: color veya colour eşleşen bir düzenli ifadedirVisual Studio Regex '?'

colou?r 

.... Bu, MSVS'de eşleşmiyor. Yardım dosyasına başvurarak ?'u bulamıyorum. öyle ki ... ... Ancak

colo(u|)r 

, ben alamadım "gruplanmış ifadesi eksik ')'.": Bu münavebe ile taklit edilebilir -

Bu

büyük bir anlaşma olmaz . İşin garibi, MSVS küme parantezleri ile (ı ... neden gerçekten emin değilim) bu alternatif grubu bulunmaktadır: "desende sözdizimi hatası"

colo{u|}r 

Bana tamamen farklı hata veriyor ... Hangi, hangi Ben bir tane göremiyorum. Temel olarak, bir ? nasıl yapabilirim? Asıl girdim renk/renk kadar basit değil, aksi halde sadece (color|colour) ile taklit ederim. Sanırım sahte olabilir, ama bu konuya gitmek için geniş bir yol.


bile hala münavebe ile, bunu yapamaz,

Tamam ... o sırada münavebe deneyelim. bireysel hatların iki takım maç

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

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

Bu iki maç, benim metni: Aşağıdaki iki Regexes var. (Ilki ikincisini maç hatlarının bir kısmını eşleşir.)

Benim girdi döviz bilgilerinin hatları:

 
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) 

(sekmeler WIR euro ve (tamamlayıcı para arasındaki, örneğin, var), ama her zaman orada değiliz.)

Mantıken, o ... o

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

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

olsun ..sen birleştirmek için izlemeniz gereken^ [AZ] + \ t [0-9] + \ t ([^ \ t] + | [^ \ t] + \ t [^ \ t] +) ... bir şekilde eşdeğer gibi görünüyor ilk sette ikinci ifadeye.

+0

Visual Studio'da regex ile ne demek istiyorsunuz? Hangi gerçek dili yazıyorsunuz? –

+2

@John Rasch: Visual Studio'nun Bul/Değiştir penceresinde var demektir. – Welbog

+0

@Welbog - şimdi mantıklı olan –

cevap

4

Bu yazının bir kısmı Jeff Atwood yazdı. Temel olarak, Visual Studio'nun normal ifadesi oldukça standart değildir ve genellikle '?' ile yapılan işlemi yapmak için kolay bir yol yoktur. {colour|color} ifadenizi kullanmanız gerekecek.

+0

Teşekkürler ... bunu bir alternatifle denediniz, düzenlemeleri görün. – Thanatos

0

Visual Studio'daki normal ifadeler bulmak, desteklemiyor mu? MSDN'de reference'a bakın.

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

Bu makalede, belirttiğim gibi yardım dosyasıyla aynı görünüme sahip değil gibi görünüyor. – Thanatos

0

Bu işleri en iyi sağ?

olurdu Örneğin, renk ve renk için:

colo(ur|r) 

ve 2 normal ifadeler için

olurdu:

belgelenmiş olmasa da
+1

Sanırım "colo (u |()) r" yi kastettiniz. Orijinal sorgunuz "match" colou 'veya' r '"okuyor – Aaron

+0

Her iki yöntemimiz de Visual Studio'da tamamen aynı şekilde çalışıyor. Kendin dene. – Greg

0

en uzun ortak yol ile denedin mi:

Gerçek örneğin
colo(u)|()r 

bu, her satırla aynı olacak: Sen bahis muhtemelen münavebe karakter

1

, ipi fark ettik

^[A-Z]+\t[0-9]+\t{[^\t]+|[^\t]+\t[^\t]+} 
"()" boş dizeyle eşleşecek. Örneğin: Aynı şekilde

colo(u|())r 

, kısmi maç almamak ya da tack emin olmak için son boş dize alternatif koymak emin olun o son durumda ile

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

denemek satır sonu belirteci '$' de.