使用Java
我不是常规正则表达式,我遇到了以下正则表达式作为springmodules验证内容迁移到最新版本的一部分。
^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\\]^_`{|}~]+$
这究竟是做什么的?我需要了解这一点,将单元测试写入此验证。顺便说一句,我在Java项目中使用它。
另一个有趣的事情,我在hibernate-validator
中尝试了这个表达式,如下所示:
@Pattern(regexp = "^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@[\\]^_`{|}~]+$")
然后我的intellijIDEA在行末显示错误 Unclosed character class 。 正则表达式是否正确形成?
更新
表达似乎格式不正确,我在尝试测试时看到以下异常:
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 \"'&!#$%()*+,-./:;?@\\[\\]^_`{|}~]+$"
这样我就把它分配给了一个字符串,这对我来说很完美。谢谢大家!
答案 0 :(得分:4)
翻译后的表达式看起来像
^[a-zA-Z0-9 "'&!#$%()*+,-./:;?@\[\]^_`{|}~]+$
表示一行字母,数字和一组其他字符(如不同的括号,其中]必须转义,不代表字符类的结尾。)
答案 1 :(得分:0)
您可以在Perl或RegexBuddy中使用类似YAPE :: Regex :: Explain的内容来获取正则表达式的详细说明。可以在下面找到凌乱的单行:
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的一部分。