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