Ошибка регулярного выражения Java - PullRequest
0 голосов
/ 03 декабря 2010

Всякий раз, когда я ввожу следующее ...

Pattern pmessage = Pattern.compile("\s*\p{Alnum}[\p{Alnum}\s]*");
Matcher mmessage = pmessage.matcher(message);
Matcher msubject = pmessage.matcher(subject);

Я получаю Invalid Escape Sequence ошибку. У кого-нибудь есть идеи, почему / как я могу это исправить?

Ответы [ 4 ]

2 голосов
/ 03 декабря 2010

Для версии \p{Alpha}, которая работает с собственным набором символов Java, вместо этого она застряла и не может обрабатывать что-либо, кроме устаревших данных 1960-х годов, вам необходимо использовать

alphabetics = "[\\pL\\pM\\p{Nl]";

Для версииЧисла в том же смысле, вы должны выбрать, какой из них вы хотите:

ASCII_digits    = "[0-9]";
all_numbers     = "\\pN";
decimal_numbers = "\\p{Nd}"

, потому что какой из них применяется в зависимости от обстоятельств.Мы предполагаем, что вы скопировали одну из этих трех в переменную numeric.

Предполагая, что затем вам понадобятся алфавитно-цифровые символы на основе приведенного выше определения, вы могли бы написать:если под буквенно-цифровыми цифрами подразумевается \w смысл идентификаторов программы, вам нужно добавить кое-что.

 identifier_chars = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";

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

1 голос
/ 03 декабря 2010

Имейте в виду, что обратные слэши - это специальные символы в строках Java, которые необходимо экранировать дополнительной обратной косой чертой:

Pattern.compile("\\s*\\p{Alnum}[\\p{Alnum}\\s]*");
1 голос
/ 03 декабря 2010

Вы не правильно экранировали свои символы "\": в java "\ s" даст вам \ s, поэтому вы должны написать:

Pattern.compile("\\s*\\p{Alnum}[\\p{Alnum}\\s]*");
1 голос
/ 03 декабря 2010

Удваивает каждый обратный слеш: Pattern.compile("\\s*\\p{Alnum}[\\p{Alnum}\\s]*")

Обратная косая черта внутри строковых литералов имеет специальное значение и должна быть продублирована, чтобы фактический символ обратной косой черты стал частью строки (что требуется в вашем примере регулярного выражения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...