Декодируйте регулярное выражение - ^[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 

&quot;&apos;&amp;!#$%()*+,-./:;?@[\]^_`{|}~]+$"/>

Я что-нибудь упустил?

Рабочее Решение

regexp = "^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@\[\]^_`{|}~]+$"

Таким образом, я назначил его на строку, и это прекрасно работает для меня спасибо все!

2 2

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.