Java регулярное выражение: проблема с двойными кавычками и границей слова

У меня проблема с сопоставлением текста, который заканчивается двойными кавычками и словом boudary.

Вот пример.

Мне нужно соответствовать: TEST "A" в каком-то тексте.

Если у меня есть строкаaaa TEST "A" aaa это должно соответствовать.

aaa TEST "A\"\n также должен соответствовать

Если у меня есть строкаaaa TEST "A"aaa это не должно совпадать.

Итак, я определил свое регулярное выражение следующим образом:

.*\bTEST "A"\b.*

Проблема в том, что

Pattern.matches(".*\\bTEST \"A\"\\b.*", "aaa TEST \"A\" aaa")

вернуть ложь

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

1 ответ

Более простой способ сделать это - удалить границу слова и проверить TEST "A" и \s (пробел / перевод строки) впоследствии. Попробуйте это регулярное выражение: TEST "A"\s, Он хорошо работает во всех предоставленных вами случаях:

const regex = /TEST "A"\s/;

console.log(regex.test(`aaa TEST "A" aaa`));
//=> true

console.log(regex.test(`aaa TEST "A"\n`));
//=> true

console.log(regex.test(`aaa TEST "A"aaa`));
//=> false

(Выше приведен фрагмент кода на JavaScript, но регулярное выражение будет работать в Java так же)


Изменить: как @slartidan предложил ниже, если регулярное выражение должно соответствовать aaa TEST "A" также вы должны использовать это регулярное выражение: TEST "A"(\s|$):

const regex = /TEST "A"(\s|$)/;

console.log(regex.test(`aaa TEST "A"`));
//=> true

Другие вопросы по тегам