2015-11-18 3 views
0

Я пытаюсь совместить 2 шаблона, в которых есть строка Copy-Of. Я использую границы слов \ b ... \ b для моего соответствия, но у меня проблема.Языковые границы Java Regex \ bbackup \ b

string = "This is a backup-Copy-Of your CD can you make a Copy-Of it?" 

Теперь я хочу, чтобы соответствовать резервного копирования Copy-Of и Copy-Of

if (Pattern.compile("\\bCopy-Of\\b").matcher(Parameter).find()) { 

Это будет соответствовать как Copy-Of из (резервного копирования Copy-Of) и Copy-само по себе.

Программа по-прежнему работает до этой точки, но когда я добавляю строку ниже ее ошибок.

if (Pattern.compile("\\bbackup-Copy-Of\\b").matcher(Parameter).find()) { 

И если я удалил первый матч шаблон ("\ bCopy-Of \ Ъ") и оставить только 2-й образец ("\ bbackup-Copy-Of \ Ъ"), она работает без каких-либо проблем.

So What is the correct way to match for backup-Copy-Of and Copy-Of. 

Результаты должны быть:

1 match for backup-Copy-Of 
1 match for Copy-Of 

ответ

0

Вам необходимо включить i модификатор, потому что o в Of в нижнем регистре, но на входе его в верхнем регистре, а также вы должны необходимо сделать up в качестве дополнительного поскольку регулярное выражение содержит backup, но на входе это back.

if (Pattern.compile("(?i)\\bback(?:up)?-Copy-of\\b").matcher(Parameter).find()) { 

или

Matcher m = Pattern.compile("(?<!\\S)back(?:up)?-Copy-Of(?!\\S)").matcher(Parameter); 
if(m.find()) { 

DEMO

+0

Жаль, что была опечатка, я обновил вопрос. по какой-то причине \\ bb ломает программу, и если я ее сменил на \\ b \ b, она будет работать, но, конечно, ничего не будет. – Moe

+0

Вы проверили 'up' в' backup'? 'Pattern.compile (" \\ bback (?: Up)? - Copy-Of \\ b "). Matcher (Параметр);' demo https://regex101.com/r/wG7aS9/2 –

+1

это не проблема с границами слов .. вы можете попробовать удалить 'up' как' Pattern.compile («\\ bback-Copy-Of \\ b»). matcher (Parameter); ' –

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