java - 这个正则表达式在 Java 中是什么意思?

标签 java regex

我们正在调试一些旧代码并遇到这个语句,有人知道它在做什么吗?

String value=...
value.toLowerCase(Locale.ENGLISH).split("[^\\w]+");

最佳答案

答案是它在做很多事情时相当天真。不然他们为什么要使用单词字符 [^\w] 的否定字符类来表示简单的 \W 中的可读性更高?没有任何意义。

此外,愚蠢的语言环境表明他们一定害怕自己在土耳其,因为我不知道除了土耳其语和阿塞拜疆语之外的任何其他语言环境,那里的大小写存在差异。通常 LATIN CAPITAL LETTER I 小写为 LATIN SMALL LETTER I,正如您所期望的那样,但在突厥语言中它小写 LATIN SMALL LETTER DOTLESS I。

即便如此,除非它们使用仅在 Java 7 中可用的嵌入式 "(?U)" 标志,否则它不会正确地用于 Unicode。你不能使 \w \W 只是通过那个愚蠢的毫无意义的语言环境来玩 Unicode 规则。您必须使用 "(?U)",否则,如果您实际编译模式,则使用 UNICODE_CHARACTER_CLASSES 标志。两者都需要 Java 7。在此之前,Java 比使用正则表达式 charclass 快捷方式处理 Unicode 更糟糕。它实际上具有误导性、错误性和危害性。

否则笨蛋会认为像 naïvely 这样的常规英语单词有两个由非单词序列分隔的单词。这是 super 愚蠢的。

因此,在回答您的问题时,我认为它并没有按照其作者的想法行事。我向你保证它已经坏了,除非它完全是 ASCII 文本。参见 here对于 Java 7 之前发生的 hell 般的事情以及你必须做些什么来解决它们,请参阅 here对于 Java 7 带来的一些好处。

关于java - 这个正则表达式在 Java 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7072341/

相关文章:

MySQL REGEXP 匹配逗号分隔列表中的零

java - 变量可能尚未初始化,但已在构造函数中设置

java - JAX-WS 如何在 HTTP 字符串被解码之前拦截它

mysql - 从 mysql 查询中消除、替换或优化 REGEXP

regex - Perl 正则表达式 |如何从文件中排除单词

ios - 电话号码格式应该是国际格式,iPhone 中是否有用于电话号码验证的正则表达式

java - 如何使用 Spring 配置 UCanAccess JDBC 驱动程序?

java - 日期属性在 java 类的方法中不起作用

java - 被 Java8 Collectors.toMap 搞糊涂了

php - 使用 checkdnsrr 验证电子邮件,是好还是坏的解决方案?