regex 正则表达式在Java中删除ASCII控制字符

mcvgt66p  于 2023-10-22  发布在  Java
关注(0)|答案(3)|浏览(114)

已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

15天前关闭。
Improve this question
我一直在阅读下面的模式用作Java中String#replaceAll()的一部分

"[\\p{Cntrl}&&[^\r\n\t]]"

删除各种不可打印的ASCII字符。
如何解释上面的咒语:

  • 哪些字符被包括作为要被删除的那些控制字符的一部分?
  • &&是什么意思?
  • ^是否意味着它只查看行的开头?

有人能提供一个全面的非技术性解释上述表达?
先谢谢你了。

unftdfkk

unftdfkk1#

这里有一些东西只在某些类型的正则表达式中可用。您可能会遇到不同语言的实现或可用性方面的差异。
在支持的情况下,您可以定义一个字符类,其中包含多个类。例如,[[a-z][0-9]][a-z0-9]的有效等价物。
在支持&&运算符的地方,它可以用来创建一个字符类,该字符类是两个字符类的交集。例如,[[a-z]&&[^d-w]]将等价于[abcxyz]
有很多预定义的字符类可以用\p{category_name}引用。在Java中,类别\p{Cntrl}表示[\x00-\x1F\x7F]。您可以在java.util.regex.Pattern的Java扩展中找到示例。
(See:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html
因此,正则表达式匹配[\x00-\x1F\x7F]范围内的所有字符,除了字符[\r\n\t]

pw9qyyiw

pw9qyyiw2#

  • ".哪些字符作为要删除的控制字符的一部分被包括在内?..."*

您可以在 PatternJavaDoc 中找到此信息。

  • 模式- POSIX字符类(仅限US-ASCII)-(Java SE 20和JDK 20)*。
  • \p 控制字符:[\x00-\x1F\x7F]

也就是说,从值 0到1f,以及值 * 7 f *。

  • . &&代表什么?..."*

&&是 * 字符类交集 * 语法的一部分。
例如,以下字符将匹配除 xy 之外的任何字符,从 az

[a-z&&[^xy]]
  • ". ^是否意味着它只查看行的开头?..."*

在一个 * 字符类 * [ ]中不存在。

a2mppw5e

a2mppw5e3#

该模式将控制字符集\\p{Cntrl} x x x(x &&)中的字符与非换行符、回车符或制表符[^\r\n\t]的字符集匹配。范例:

"a\u0001b\u0002c\rd\te\nf".replaceAll("[\\p{Cntrl}&&[^\r\n\t]]","-");
=> control codes 0001 and 0002 are removed: "a-b-c\rd\te\nf"

为了帮助解释,考虑将\\p{Cntrl}交换为[a-z],将[^\r\n\t]交换为[^aeiou],然后您将拥有一个可用于过滤辅音的模式:

"123abcdef".replaceAll("[[a-z]&&[^aeiou]]","-");
=> "123a---e-"

相关问题