【发布时间】:2014-11-12 10:51:08
【问题描述】:
使用 Java
我不是正则表达式的常客,我在将 springmodules-validation 内容迁移到最新版本时遇到了以下正则表达式。
^[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 \"'&!#$%()*+,-./:;?@\\[\\]^_`{|}~]+$"
通过这种方式,我将它分配给了一个字符串,这对我来说非常有效,谢谢大家!
【问题讨论】:
-
字符实体如 " ’等不在正则表达式中解释。这是从一些xml中提取的吗?您必须将它们翻译成原始字符。
-
看起来我应该在 xml/xhtml 中使用
&quot;&apos;&amp;这些,在我的表达中我应该替换这些。这是问题吗?如果是这样,我必须用 \ 来逃避这个吗? -
@UweAllner 说得好。我该如何替换它们?所有这些都需要逃脱吗?还是只有
&quot? -
当您在 xml 文件之外使用表达式(例如注释)时,您必须使用 " 而不是 "。否则字符 &、q、u、o、t 和 ;匹配。
-
@UweAllner 是的,抱歉我忘记更新了。您的解决方案就像一个魅力。谢谢!
标签: java regex hibernate-validator spring-modules