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