Unicode字符支持作为regex的范围



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

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

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

虽然上面张贴的答案工作良好,但由于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));
}
}

使用\u而不是x,并删除花括号并在regex中添加转义序列,因此它变成:

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

最新更新