2

使用 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 

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

我错过了什么吗?

工作解决方案

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

通过这种方式,我将它分配给了一个字符串,这对我来说非常有用,谢谢大家!

4

2 回答 2

4

翻译后的表达式看起来像

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

and 表示一行字母、数字和一组其他字符(如不同的括号,其中 ] 必须转义,因为它不表示字符类的结尾)。

于 2014-11-12T11:26:22.000 回答
0

您可以在 Perl 或 RegexBuddy 中使用 YAPE::Regex::Explain 之类的东西来获取正则表达式的详细描述。一个凌乱的单线可以在下面找到:

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 事物的一部分。

于 2014-11-12T12:01:37.260 回答