0

我有这个来自 groovy 代码的正则表达式:

(?:[^\p{Alnum}äöü**~D~V~\~_**]|^)

(?:sometext|s\.t\.)

(?:[^\p{Alnum}äöü**~D~V~\~_**]|$$)

我唯一不明白的是这部分:

**~D~V~\~_**

波浪号在那里做什么?这是一个错误吗?或者只是角色类的一些开关?

我的理解是第一行和第三行确实匹配单词边界,而第二行匹配有问题的文本(长短形式)。

我尝试用谷歌搜索(当然在这里搜索)但不幸的是,该图块属于 groovy 中的“匹配这个”运算符,所以我在这里找到的所有内容都是关于如何正则表达式的一般信息。

4

1 回答 1

2

波浪号在 groovy 或 Java 正则表达式中没有任何特殊含义。Groovy 根本不会改变 Java 对正则表达式的解释。的所有特殊字符都列在java.util.regex.Pattern.

如果您删除\p{Alnum}字符类和转义的波浪号,您可以更容易地看到它~没有被特殊处理:

assert ("D" ==~ "(?:[^äöü~D~V~_])") == false
assert ("V" ==~ "(?:[^äöü~D~V~_])") == false
assert ("~" ==~ "(?:[^äöü~D~V~_])") == false
assert (" " ==~ "(?:[^äöü~D~V~_])") == true

我会扔掉这些正则表达式。它们显然是错误的,并且被额外的字符混淆了。单词边界可以匹配,\b并且\p{Alnum}äöü几乎可以肯定是\p{Alphabetic}\p{Digit}正确处理 unicode。

于 2012-07-12T15:46:04.457 回答