Соответствие шаблону регулярных выражений не работает, указав строку в Java - PullRequest
2 голосов
/ 28 декабря 2011

Я использовал шаблон REGEX в Java (приведенный ниже): Working Pattern

для строки: working string Работает нормально. Но когда я попытался использовать следующий шаблон: non working pattern

для строки: str =

nonworking string Извините за загрузку изображения. Похоже, что символ '[]' в a00 [] по-разному кодируется в браузере. Есть ли способы прочитать этот символ по-другому? Этот же символ имеет другое представление в блокноте ++. Я использую RXTX и inputStream.read (readBuffer) для чтения данных. Есть ли способ, которым я могу обновить свои методы кодирования в Java, чтобы преодолеть это? http://i.imgur.com/sdUjS.jpg i.imgur.com

P.S: Извините за описание изображения - если оно напечатано, я не могу представить этот символ. когда я копирую и вставляю этот символ, он становится пустым.

1 Ответ

2 голосов
/ 28 декабря 2011

Странный символ (& # x2514;) выглядит так, как ASCII 3 представлен в некоторых шрифтах.

В Regex, \b соответствует границе слова. То есть между буквенно-цифровым и не буквенно-цифровым символом. В первом случае это работает, потому что перед соответствующей подстрокой стоит цифра («9») и сразу после нее восклицательный знак («!») (Не алфавитно-цифровой символ).

Во втором случае вы сменили восклицательный знак на букву, поэтому переход от буквенно-цифрового к не буквенно-цифровому больше не выполняется.

Решение состоит в том, чтобы расширить регулярное выражение, чтобы оно также соответствовало символу и цифре:

Pattern.compile("(\\x03\\d)(a)\\w*(?=\\x03\\d)");

Я использовал \\x03\\d для сопоставления кодов. Последняя часть (?= ) - это прогноз. Он проверяет, совпадает ли он, но не потребляет его. Это так, поэтому вы делаете несколько совпадений подряд.


Более простой альтернативой было бы просто разбить строку на "& # x2514;" и проверить фрагменты.

s.split("\u0003")
...