gpt4 book ai didi

java - Groovy 正则表达式 : What does a tilde in a character class do?

转载 作者:行者123 更新时间:2023-12-02 07:41:58 26 4
gpt4 key购买 nike

我有一个来自常规代码的正则表达式:

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

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

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

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

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

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

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

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

最佳答案

波浪号在 groovy 或 Java 正则表达式中没有任何特殊含义。 Groovy 根本不会改变 Java 对正则表达式的解释。 API 引用页上列出了 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。

关于java - Groovy 正则表达式 : What does a tilde in a character class do?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com