2015-10-15 18 views
1

Я пытаюсь создать регулярное выражение, нечувствительное к регистру. У меня есть следующие, но я не уверен, что это правильным или нет:Regex с префиксом, нечувствительным к регистру

String value1 = "97 ebt ue i ua so sufi iqc k"; 
String pattern1 = "(?=(\\b(?i:.*s.*)))(?=(\\b(?i:.*q.*)))"; 

В моем примере я пытаюсь найти соответствие pattern1 в value1. Насколько я понимаю:

  1. \\b соответствует любому слову в строке
  2. :.* и .* делают случай нечувствительного

Это работает с некоторыми случаями, но с другими не получается. Я не могу понять эту проблему.

UPDATE:

Этот случай здесь возвращает истину, но она должна возвращать ложь. Дело в том, что должно быть слово, которое заканчивается s, и другое, заканчивающееся q, так как ничто не заканчивается ни одним из них, поэтому оно должно потерпеть неудачу.

+0

Какой результат вы ищете? '\\ b' - это только граница слова, это не соответствует слову. '(? i)' можно использовать в начале только один раз, и весь шаблон будет нечувствительным к регистру. –

+1

С какими случаями он работает и с которыми не справляется. Можете привести несколько примеров? – Siddhartha

+0

Я обновил свой вопрос – omarsafwany

ответ

1

Конструкция \\b - это только граница слова, она не соответствует ни одному слову.

(?i) можно использовать в начале только один раз, и весь шаблон будет нечувствительным к регистру.

Дело в том, должно быть любое слово, которое заканчивается s и еще один, который заканчивается q так, поскольку ничто не кончается ни с одной из них, так что должно обязательно

Использование

(?Ui)^(?=.*s\\b)(?=.*q\\b) 

Здесь у нас есть два привязанных внешнего вида, требующих двух слов, заканчивающихся q и s внутри входной строки (без учета регистра).

Вот code demo:

String value1 = "97 ebts ue i ua so sufi iqc k"; 
String pattern1 = "(?Ui)^(?=.*s\\b)(?=.*q\\b)"; 
Pattern ptrn = Pattern.compile(pattern1); 
Matcher matcher = ptrn.matcher(value1); 
if (matcher.find()) 
    System.out.println("true"); 
else 
    System.out.println("false"); 

Если вам интересно, что ?U означает, что она просто «фиксации» границы \b слова в пределах строки Unicode. Если вы не используете буквы, отличные от латинского, вы можете удалить U.

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