Unicode 字符支持作为正则表达式中的范围

时间:2021-02-17 15:36:45

标签: java regex unicode

我正在编写一个正则表达式来支持大小写字母、数字、- 和 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);
    }

2 个答案:

答案 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));
    }
}
相关问题