chs*_*boy 9 java regex datetime bidi arabic
我正在开发一个运行一系列正则表达式的程序,试图从网页中查找DOM中的日期.例如,在www.engadget.com/2010/07/19/windows-phone-7-in-depth-preview/,我会将"2010年7月19日"与我的正则表达相匹配.在我访问阿拉伯语网页之前,各种格式和语言的情况都很顺利.例如,请考虑http://islammaktoob.maktoobblog.com/.2010年7月18日的日期显示在帖子顶部的阿拉伯语中,但我无法弄清楚如何匹配它.有没有人有匹配阿拉伯语日期的经验?如果有人可以发布他们用来匹配该阿拉伯语日期的示例或正则表达式,那将非常有帮助.谢谢!
越来越近:
String fromTheSite = "????? ????? ????? ? ?? 18 ???? 2010 ??????: 09:42 ?";
NamedMatcher infoMatcher = NamedPattern.compile("(?<Day>[0-3]?[0-9]) (?<Month>?????|??????|????|?????|?????|????|?????|?????|?????|?????|?????|??????|??????|??????|??????|????? ??????|????|????|?????|????|??????|????|??|?????|????? ?????|????? ??????|????? ?????) (?<Year>[1-2][0-9][0-9][0-9]) ", Pattern.CANON_EQ).matcher(fromTheSite);
while(infoMatcher.find()){
System.out.println(infoMatcher.group());
System.out.println(infoMatcher.group("Day"));
System.out.println(infoMatcher.group("Month"));
System.out.println(infoMatcher.group("Year"));
}
Run Code Online (Sandbox Code Playgroud)
给我
18 ???? 2010
18
????
2010
Run Code Online (Sandbox Code Playgroud)
为什么匹配出现乱序?
如果您查看复制文本的二进制代码,您可以看到该句子实际上是从右到左阅读保存的(因此右侧的第一个字母是文件中的第一个字母)。
它在渲染时将文本更改回来,使其看起来像是从右到左书写的(这也会导致这种奇怪的选择行为)。
因此,您必须从右向左搜索。
此外,重要的是要注意数字没有交换。
如果您可以读取"txet emos 20 yluJ 2016 srahc modnar",
则将其保存"random chars 2016 July 20 some text"在文件中。