我正在编写一个正则表达式来支持大小写字母、数字、- 和 00C0-00FF 范围内的 Unicode 字符。
我已经看到使用正则表达式 \p{L}+ 解释支持所有语言字符的答案,但我不想支持所有语言字符。我只想支持 URL https://unicode-table.com/en/blocks/latin-1-supplement/
中特定范围 [00C0-00FF] 的 Unicode 字符我在网站 https://regex101.com/ 上使用模式 O’Donnell À Ö ö Ì ÿ 012
测试了我的示例字符串 [A-Za-z0-9\x{00C0}-\x{00FF}'’\- ]{1,70}
但是这个模式 [A-Za-z0-9\x{00C0}-\x{00FF}'’\- ]{1,70}
在 java 中不起作用。能否支持我为 Java 编写等效模式。
我用来测试正则表达式的示例代码 -
public static void main(String... args) {
Pattern p = Pattern.compile("[A-Za-z0-9\\x{00C0}-\\x{00FF}'’\\- ]{1,70}",
Pattern.UNICODE_CHARACTER_CLASS);
Matcher m = p.matcher("O’Donnell À Ö ö Ì ÿ 012");
boolean b = m.matches();
System.out.println("value=" + b);
}
答案 0 :(得分:1)
使用 \\u
而不是 \x
并删除大括号并在正则表达式中添加转义序列,使其变为:
"[A-Za-z0-9\\u00C0-\\u00FF'’\\- ]{1,70}"
答案 1 :(得分:1)
虽然上面发布的答案工作正常,但由于 Windows 文件编辑器编码问题,它可能会在 Windows 机器上失败。对于 Unicode 字符,应该使用 UTF-8 编码来保存文件。在字符串中使用特殊字符的 Unicode 值也很好,如下例所述。
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String str = "O'Donnell \u00C0 \u00D6 \u00F6 \u00CC \u00FF 012"; // Unicode value of string 'O’Donnell À Ö ö Ì ÿ 012'
System.out.println(Pattern.matches("[A-Za-z0-9\\u00C0-\\u00FF'’\\- ]{1,70}", str));
}
}