java - 为什么正则表达式\pL+\pM+ 不适用于英语?

标签 java regex unicode utf-8

为什么正则表达式 \pL+\pM+ 不适用于英语?

为什么下面的第一个示例结果为 false,而第二个示例结果为 true?

System.out.println(Charset.forName("UTF-8").encode("suren") 
                .asCharBuffer().toString().matches("\\PL+\\PM+"));

System.out.println(Charset.forName("UTF-8").encode("स्वागत") 
                .asCharBuffer().toString().matches("\\PL+\\PM+"));

基本上我需要一个正则表达式来限制字符串中的unicode字符(世界上的任何语言)

最佳答案

你想要

"^[\\p{Letter&}\\p{Mark}]+$"

您的正则表达式需要一个标记(\PM+),而您只想允许它。另请注意 anchor 。

一般说明:我建议使用 Unicode 字符属性的长形式。它使表达式更具可读性。

关于java - 为什么正则表达式\pL+\pM+ 不适用于英语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16352945/

相关文章:

MySQL : Select from table based on shape of arabic character in a column

winapi - CreateWindowExA 将常规字符串解释为 Unicode,在标题中显示中文字符

java - 触摸 fragment 内的按钮时隐藏/显示 TextView

java - 如何将YouTube播放列表解析为ArrayList

c# - 如何在特殊条件下使用 C# 中的正则表达式突出显示关键字?

Python:按模式分割字符串

JavaBean 缺点——构造时不一致

java - Spring 会将内容保存在内存中还是存储在磁盘中?

regex - 如何在 R 中使用 grep() 从数据框中选择行

php mysql 和 unicode