Декодируйте регулярное выражение - ^[a-zA-Z0-9"'&!#$%()*+,-./:;?@[\]^ `{|}~]+$
Использование Java
Я не являюсь регулярным пользователем регулярных выражений, я наткнулся на следующее регулярное выражение как часть миграции springmodules-validation stuff to latest.
^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\]^_`{|}~]+$
Что именно это делает? Мне нужно понять это, чтобы написать модульный тест для этой проверки. Кстати, я использую его в проекте Java.
Еще одна интересная вещь, я попробовал это выражение в hibernate-validator
следующим образом:
@Pattern(regexp = "^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\]^_`{|}~]+$")
Тогда моя intellijIDEA показывает ошибку в конце строки, говоря Unclosed класс символов . правильно ли сформировано регулярное выражение?
Обновить
Похоже, что выражение искажено, я вижу следующее исключение при попытке проверить это:
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';
После предоставления регулярного выражения из stdin:
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.