Декодировать выражение Regex - ^[a-zA-Z0-9 "& amp;!#$%()*+,-./:;?@[\\]^_`{|}~]+$
Использование Java
Я не являюсь постоянным пользователем регулярных выражений, я столкнулся со следующим регулярным выражением как часть перехода от Spring-модулей-валидации к последнему.
^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\\]^_`{|}~]+$
Что именно это делает? Мне нужно понять это, чтобы написать модульный тест для этой проверки. Кстати, я использую его в проекте Java.
Еще одна интересная вещь, я попробовал это выражение в hibernate-validator
следующее:
@Pattern(regexp = "^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\\]^_`{|}~]+$")
Затем мой intellijIDEA показывает ошибку в конце строки, говорящую о незакрытом символьном классе. это выражение регулярного выражения сформировано правильно?
Обновить
Кажется, что выражение искажено, я вижу следующее исключение при попытке проверить это:
java.util.regex.PatternSyntaxException: Unclosed character class near index 57
^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\]^_`{|}~]+$
Вот оригинальное выражение из одного из XML-файлов, которые я пытаюсь перенести:
<regexp apply-if="creativeType == 'Text'" expression="^[a-zA-Z0-9
"'&!#$%()*+,-./:;?@[\\]^_`{|}~]+$"/>
Я что-то пропустил?
Рабочий раствор
regexp = "^[a-zA-Z0-9 \"'&!#$%()*+,-./:;?@\\[\\]^_`{|}~]+$"
таким образом, я назначил его на строку, и это прекрасно работает для меня Спасибо всем!
2 ответа
Переведенное выражение будет выглядеть примерно так
^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@\[\]^_`{|}~]+$
и означает строку букв, цифр и набор других символов (например, различные скобки, где] должен быть экранирован, чтобы не означать конец класса символов).
Вы можете использовать что-то вроде YAPE::Regex::Explain в Perl или RegexBuddy, чтобы получить подробное описание вашего регулярного выражения. Грязный однострочник можно найти ниже:
perl -MYAPE::Regex::Explain -e \
'$e=<>; print YAPE::Regex::Explain->new($e)->explain';
После предоставления регулярного выражения от стандартного ввода:
The regular expression:
^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\]^_`{|}~]+$
matches as follows:
NODE EXPLANATION
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
^ the beginning of the string
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[a-zA-Z0-9 any character of: 'a' to 'z', 'A' to 'Z',
"'&!#$%()*+,- '0' to '9', ' ', '"', ''', '&', '!', '#',
./:;?@[\]^_`{|}~]+ '$', '%', '(', ')', '*', '+', ',' to '.',
'/', ':', ';', '?', '@', '[', '\]', '^',
'_', '`', '{', '|', '}', '~' (1 or more
times (matching the most amount possible))
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$ before an optional \n, and the end of the
string
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Использование чего-то вроде Regex Buddy позволит вам выбрать разновидность Java для вашего регулярного выражения, но в этом случае оно должно быть довольно стандартным.
Вы уверены, что это Java, хотя? Из всего этого побега это выглядит как часть XSD / XPath / XML.