Groovy 在字符串中使用模式

本帖最后由 Ledoux 于 2012-11-26 00:33 编辑

怎样在一个字符串中声明一个符号序列?

在java中,这通常会引起混淆,为了传递一个反斜杠(\)给java字符串,模式必须使用许多反斜杠,必须双倍的输入反斜杠,这导致模式在java中十分难以阅读,更坏的结果是在模式中需要获取一个真实的反斜杠的时候,模式语言也转义一个反斜杠,因此,匹配a\b的模式用java字符串表示为“a\\b”。

Groovy的处理方式好得多,就像你先前看到的那样,通过斜杠(/)构成的字符 串,这不需要转义反斜杠(\)字符,并且仍然像一个一般的Gstring一样工作。

表3.4显示了怎样方便的声明一个模式。

这种语法不需要对$进行转义,注意,可以选择使用这几种字符串风格的声明方式。

符号

使用正则表达式的关键是明白模式的符号,为了方便,表3.8显示了常用的符号列表,把这一页放在特殊的地方以方便查找,很多时候将使用到它。

表3.8 正则表达式符号(摘要)

更多的考虑:

 使用分组属性,像星号和加号这样的扩展操作符进行的是最近匹配原则;ab+匹配的是abbbbb,使用(ab)+则匹配的是ababab。

 在一般情况下,扩展操作符进行贪婪匹配,意思是说这将进行最长的子串 匹配,在操 作符后 面增加 一个 ?表示进 行限制 匹配, 你也许想 使用这 个模式 href=”(.)”从一个HTML描点元素中抽取href属性,但href=”(.?)”也许更 好,第一个版本直到在文本的最后一个双引号时才结束,第二个版本直到下一个双
引号出现。

这里仅仅对正则表达式进行了简短的描述,在JDK中有完整的说明文档,这个文档在类 java.util.regex.Pattern的javadoc中,基于JDK 1.4.2的文档可以在 http://java.sun.c om/j2se/1.4.2/docs/api/jav a/util/regex/Pattern.ht ml.找到。

通过javadoc了解更多不同的匹配方式,如反向匹配等等。

在写入代码之前进行测试总是有用的,有一个在线应用程序进行正则表达式的交互式测 试:例如,http://www .nvcc.edu/home/drodgers/c eu/resources/test_regexp.asp,应该意识到不是所有的正则表达式模式语言都是相同的,同一个正则表达式在.NET和JAVA或者Groovy程序中得到的可能不是期望的结果。差异是存在的,如果读者从书上或者网上获取到的一个正则表达式,仍旧应该在代码中进行测试。

现在可以进行模式的声明了,还需要告诉groovy该如何应用。