2014-09-03 2 views
-1

Эй им в поисках рабочего регулярного выражения дляПоиска Regex соответствия строки

Я пытался что-то вроде этого ^([-])?(([(])?[-|]{0}[a-zA-z0-9|]([)])?([.])?)+$, но это не очень приятно.

Она должна соответствовать:

world.block.(1-2|1).(test1|stack) 
test.test.(1-2|1) 
world.(test1|stack) 
-help.block.(1-2|1).(test1|stack) 

, но он не должен соответствовать

-world.help 
world.stack 
world.block. 

Все литералы являются примерами!

+0

непонятно, каков ваш вклад и что вы пытаетесь сопоставить? – Dalorzo

+0

Я думаю, что вы забыли рассказать нам, что вам нужно, чтобы регулярное выражение соответствовало –

+0

, попробуйте это регулярное выражение: '(world \ .block \. \ (1-2 \ | 1 \) \. \ (Test1 \ | stack \)) | (-Мировой \ .block \ \ (1-2 \ |. 1 \) \ \ (test1 \ |. стек \) |. (мир \ .block \ \ (1-2 \ | 1 \))) | (world \. \ (test1 \ | stack \)) ' –

ответ

0

Вот некоторые Java-код, который должен делать то, что вы хотите:

public static void main(String[] args) { 
    Pattern pattern = Pattern.compile("^-?([^\\.]+\\.){1,2}\\((\\d+-\\d+|\\d+)|([^|]+|[^|]+)\\)$"); 
    String[] samples = { "world.block.(1-2|1).(test1|stack)", 
     "test.test.(1-2|1)", 
     "world.(test1|stack)", 
     "-help.block.(1-2|1).(test1|stack)", 
     "-world.help", 
     "world.stack", 
     "world.block." 
    }; 

    for (String sample : samples) { 
     Matcher matcher = pattern.matcher(sample); 
     System.out.println(sample + (matcher.find() ? " matched" : " failed")); 
    } 
} 

Выход:

world.block.(1-2|1).(test1|stack) matched 
test.test.(1-2|1) matched 
world.(test1|stack) matched 
-help.block.(1-2|1).(test1|stack) matched 
-world.help failed 
world.stack failed 
world.block. failed 

Единственное, что отсутствует проверки диапазона цифр. Можно добавить это, но я предпочел бы использовать подходящую группу и выполнить проверку диапазона с помощью математики вместо этого, чтобы избежать чрезмерного нарушения регулярного выражения.