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

Unicode character support as range in regex

我正在编写一个正则表达式来支持大小写字母、数字、- 以及 00C0-00FF 范围内的 Unicode 字符。

我看到解释使用正则表达式 \p{L}+ 支持所有语言字符的答案,但我不想支持所有语言字符。我只想支持 URL https://unicode-table.com/en/blocks/latin-1-supplement/

中特定范围 [00C0-00FF] 的 Unicode 字符

我在网站 https://regex101.com/ 上用模式 [A-Za-z0-9\x{00C0}-\x{00FF}'’\- ]{1,70} 测试了示例字符串 O’Donnell À Ö ö Ì ÿ 012 但是这种模式 [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);
    }

使用 \u 而不是 \x 并删除大括号并在正则表达式中添加转义序列,使其变为:

"[A-Za-z0-9\u00C0-\u00FF'’\- ]{1,70}"

虽然上面发布的答案工作正常,但由于 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));
    }
}