Странный символ (& # x2514;) выглядит так, как ASCII 3 представлен в некоторых шрифтах.
В Regex, \b
соответствует границе слова. То есть между буквенно-цифровым и не буквенно-цифровым символом. В первом случае это работает, потому что перед соответствующей подстрокой стоит цифра («9») и сразу после нее восклицательный знак («!») (Не алфавитно-цифровой символ).
Во втором случае вы сменили восклицательный знак на букву, поэтому переход от буквенно-цифрового к не буквенно-цифровому больше не выполняется.
Решение состоит в том, чтобы расширить регулярное выражение, чтобы оно также соответствовало символу и цифре:
Pattern.compile("(\\x03\\d)(a)\\w*(?=\\x03\\d)");
Я использовал \\x03\\d
для сопоставления кодов. Последняя часть (?= )
- это прогноз. Он проверяет, совпадает ли он, но не потребляет его. Это так, поэтому вы делаете несколько совпадений подряд.
Более простой альтернативой было бы просто разбить строку на "& # x2514;" и проверить фрагменты.
s.split("\u0003")