2013-09-17 3 views
-1

мне нужно, чтобы соответствовать "/ ан", "/ я", "/ ZH-сп"простой Java регулярные выражения

Я написал регулярное выражение, как это

String str = "/en"; 
if(str.matches(".[(en)(ja)(zh\\-cn)]$")) 
    System.out.println(str); 

это оленья кожа work.can кто-нибудь помочь здесь, пожалуйста

+0

Когда-либо видел этот символ в регулярных выражениях - '|'? – devnull

ответ

3

Используйте следующие (с помощью pattA|pattB вы можете сопоставить pattAилиpattB):

"/(en|ja|zh-cn)" 

или после, если вы хотите соответствовать другой код языка:

"/[-a-z]+" 

"/[a-z]{2}(-[a-z]{2})?" 
+1

должно быть '-' перед' a-z'? – vikingsteve

+0

@vikingsteve, '-' также может быть после' a-z'. Без '-' он не будет соответствовать' zh-cn'. – falsetru

+0

Я предпочитаю положить '-' в начале' [] '. Если он используется в середине, он должен быть экранирован ('\ -'), чтобы он соответствовал буквам' -' буквально. – falsetru

2

Вы, кажется, не понимают, как работают классы персонажей. Класс символов вы используете будет соответствовать любой один символ ( или e или n или ) или j или a или z или h и т.д.

Вам нужно использовать группу, чтобы сделать то, что вы пытаетесь делать:

str.matches("/(?:en|ja|zh-cn)$") 

| это указывает «или», и я использовал без захвата группы (?: ...). Используйте группу захвата (...), если позже вы будете использовать «en», «ja» или «zh-cn».

Смежные вопросы