unicode正则表达式模式不起作用

use*_*361 5 java regex unicode

我试图匹配一些unicode字符序列:

Pattern pattern = Pattern.compile("\\u05[dDeE][0-9a-fA-F]{2,}");
    String text = "\\n     \\u05db\\u05d3\\u05d5\\u05e8\\u05d2\\u05dc\\n    <\\/span>\\n<br style=\\";
    Matcher match = pattern.matcher(text);
Run Code Online (Sandbox Code Playgroud)

但这样做会产生以下异常:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal Unicode escape sequence near index 4
  \u05[dDeE][0-9a-fA-F]+
      ^
Run Code Online (Sandbox Code Playgroud)

我如何使用仍然使用正则表达式与一些正则表达式字符(如"[")匹配unicode?

编辑:我正在尝试解析一些文本.某处的文本有一系列Unicode字符,我知道它们的代码范围.

Edit2:我现在正在使用范围:[\\u05d0-\\u05ea]{2,}但仍然无法匹配上面的文本

编辑3:好的,现在它正在工作,问题是我在正则表达式和文本中使用了两个反斜杠而不是一个反斜杠.对此的解决方案是,假设我知道将有两个或更多的字符:

[\u05d0-\u05ea]{2,}
Run Code Online (Sandbox Code Playgroud)

Ibr*_*jar 8

以下是导致异常的原因:

\\u05[dDeE][0-9a-fA-F]}{2,}
  ^^^^
Run Code Online (Sandbox Code Playgroud)

java正则表达式解析器认为您正在尝试使用转义序列匹配Unicode代码点,\uNNNN因此它会给出异常,因为\u它后面需要四个十六进制数字,并且只有两个十六进制数字,即05所以您需要将其更改为\\u0005if这就是你真正想要的.

在另一方面,如果你想匹配\\u的目标字符串,那么你就需要逃避每个反斜线\这样\\\\如此匹配\\u需要\\\\\\\\u.

\\\\\\\\u05[dDeE][0-9a-fA-F]}{2,}
Run Code Online (Sandbox Code Playgroud)

最后,如果你想在目标字符串中逐字匹配那些Unicode代码点,那么你需要修改我们的最后一个表达式,如下所示:

(?:\\\\\\\\u05[dDeE][0-9a-fA-F]){2,}
Run Code Online (Sandbox Code Playgroud)

编辑:由于目标字符串中只有一个反斜杠,因此您的正则表达式应为:

(?:\\\\u05[dDeE][0-9a-fA-F]){2,}
Run Code Online (Sandbox Code Playgroud)

这将匹配\u05db\u05d3\u05d5\u05e8\u05d2\u05dc您的字符串

<\/span><\/span><span dir=\"rtl\">\n \u05db\u05d3\u05d5\u05e8\u05d2\u05dc\n <\/span>\n<br style=\"clear : both; font-size : 1px;\">\n<\/div>"}, 200, null, null);
Run Code Online (Sandbox Code Playgroud)

编辑2:如果你想匹配文字,\u05db\u05d3\u05d5\u05e8\u05d2\u05dc那么你不能使用范围.

另一方面,如果要在两者之间匹配Unicode代码点05d0,05df则可以使用:

(?:[\\u05d0\\u05df]){2,}
Run Code Online (Sandbox Code Playgroud)