捕获U+的正则表达式;Java中的XXXX(或\uxxx)字符
我一直在尝试使用PDFBox创建PDF,但失败了,出现了如下错误: java.lang.IllegalArgumentException:U+0083在此字体的编码中不可用:WinAnScienceODing 我想知道是否有一种方法可以使用正则表达式捕获这些元素,我已经尝试使用捕获U+的正则表达式;Java中的XXXX(或\uxxx)字符,java,regex,pattern-matching,Java,Regex,Pattern Matching,我一直在尝试使用PDFBox创建PDF,但失败了,出现了如下错误: java.lang.IllegalArgumentException:U+0083在此字体的编码中不可用:WinAnScienceODing 我想知道是否有一种方法可以使用正则表达式捕获这些元素,我已经尝试使用 (\\[a-z]00[0-9][0-9]) 如果我使用RegexTool(比如RegexBuddy)进行验证,但在Java中不起作用,那么它似乎可以正常工作!我尝试过使用Java模式和Matcher,但没有成功。我对P
(\\[a-z]00[0-9][0-9])
如果我使用RegexTool(比如RegexBuddy)进行验证,但在Java中不起作用,那么它似乎可以正常工作!我尝试过使用Java模式和Matcher,但没有成功。我对Pattern Matcher所做的工作如下:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class MatcherFindStartEndExample {
public static void main(String[] args) {
String text =
"IMTECH Ã\u0083¢Ã\u0082Â\u0080Ã\u0093Â\u0083 " +
"ERCC Ã\u0099¢à PLANNED ";
String patternString = "(\\[a-z]00[0-9][0-9])";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
int count = 0;
while(matcher.find()) {
count++;
System.out.println("found: " + count + " : "
+ matcher.start() + " - " + matcher.end());
}
}
}
我现在看到的文本是这样的
IMTECHÃ\u0083Ã\u0082\u0080Ã\u0093\u0083 ERCCÃ\u0099Ã
谢谢我假设您希望匹配字面上的“\u0083”,而不是它所代表的unicode字符。
试试
(\\\\u00[0-9][0-9])
您的patternString逐字搜索文本,而不是字符。
您可以搜索如下字符列表:
String patternString = "[\u0083|\u0082|\u0080]";
String patternString = "[\u0080-\u0090]";
或者对于这样的列表:
String patternString = "[\u0083|\u0082|\u0080]";
String patternString = "[\u0080-\u0090]";
此正则表达式将找到所有
反斜杠+u
+4位
String patternString = "[\\\\]+[u]+\\d{4}";
输出:
发现:1:8-14
查询时间:2:17-23
发现时间:3:24-30
发现时间:4:31-37
发现:5:38-44
查询时间:6:51-57
我不确定您到底想在这里做什么,但是“\u0083”
是一个表示一个字符而不是六个字符的字符。它不会被正则表达式“.0083”
匹配,但会被“
匹配
另外,“\\”
表示Java字符串中的一个字符,即反斜杠;在正则表达式中,单个反斜杠转义以下字符。在本例中,“\\[”
匹配一个文本开头方括号字符
但所有这些可能都无关紧要,因为像和
这样的序列的存在表明你在错误处理UTF-8数据。特别是,似乎有人强迫每个字节都使用char值,而不是使用a正确解码字节。然后,同样的错误再次应用到新的、不正确的字符串上
反向工作时,这些字符:
ERCC Ã\u0099¢
对应于这些十六进制字节值:
45 52 43 43 20 c3 99 c2 a2
如果不强制每个字节值都是一个字符,而是将它们解码为UTF-8字节,则得到字符串“ERCCÙÙ¢”
。如果我们再次将每个字符视为一个字节值,则得到:
45 52 43 43 20 d9 a2
如果我们再次使用UTF-8解码这些字节,我们会得到我猜是指的“ERCC٢”
如果修复了提取文本的代码,则可以将该字符串与类似于Pattern.compile(“ERCC\\s*\\d+”,Pattern.UNICODE\u CHARACTER\u CLASS)的内容进行匹配