2013-10-08 5 views
1

Я пытаюсь построить строку регулярных выражений в Java.Java - регулярное выражение для поиска

Пример

search - test 

он должен соответствовать следующие TestCases

1. The test is done 
2. me testing now 
3. Test 
4. tEST 
5. the testing 
6. test now 

То, что я прямо сейчас (не работает)

([a-z]+)*[t][e][s][t]([a-z]+)* 

, что может быть правильный код регулярное выражение для этого ??

+0

Ответ ** YY **, как в 'Y не trY' ... Вы всегда можете играть с регулярными выражениями на несколько сайтов, в том числе [этот] (http://www.regexplanet.com/advanced/java/index.html) ... – ppeterka

+0

Не работает вообще или только для некоторых значений? Java чувствительна к регистру. Я не эксперт по регулярному выражению, но я уверен, что есть некоторые из Stackoverflow, которые разрешат это через секунду: D –

+0

Почему '[t] [e] [s] [t]' вместо 'test'? Также '([a-z] +) *' - простой способ [катастрофического возврата] (http://www.regular-expressions.info/catastrophic.html). – Pshemo

ответ

2

Один из подходов могут быть то, что вы называете String#matches так:

String search = "test"; 
String line = "The Testing"; 
boolean found = line.matches("(?i)^.*?" + Pattern.quote(search) + ".*$"); // true 

Здесь (?i) используются для игнорирования регистра спички и Pattern.quote используются для экранирования возможных регулярных выражений специальных символов из строки search.

1

Попробуйте ((\ w \ s) (тест) (\ s \ w)). Кроме того, использование со строки, которую Вы ищете в с TOLOWER

String regex = "((\\w\\s)*(test)(\\s\\w)*)"; 
String text = "someTesTt"; 

Pattern pattern = Pattern.compile(regex) 

Matcher matcher = pattern.matcher(text.toLowerCase()); 
if(matcher.find()) { 
    // we have a match! 
} 
1

Вы можете использовать Pattern pattern = Pattern.compile(".*test.*", Pattern.CASE_INSENSITIVE);, а также.

1

Регулярное выражение, чтобы найти test слово без дифференциации размера букв будет

(t|T)(e|E)(s|S)(t|T) 
Смежные вопросы