有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多正则表达式与搜索算法

我有一个文本文件,其中每一行都是以下任意一组的随机组合

数字-英语字母-阿拉伯语字母-标点符号

\w由前两组的a-zA-Z0-9_u组成

\p{InArabic}用于第三组

\p{Punct}它由!“#$%&;'()*+,-./:;<;=>;?@[]^ `{124;}用于第五组

我从here那里得到了这个信息

我读了一行。我唯一一次对这行做一些事情是,如果这行包含阿拉伯字母和(英文字母或Unicode符号)

在读了这个post和这个post之后,我想出了下面的表达式。显然这是错误的,因为我的输出都是错误的><

pattern = Pattern.compile("(?=\\p{InArabic})(?=[a-zA-Z])");

这是输入

1
1a
a!
aش
شa
ششa
aشش
شaش
aشa
!aش

前三个不应该匹配,但我的输出显示没有一个匹配

编辑:抱歉,我刚刚意识到我忘了更改我的标题。但是,如果你们中的任何人觉得搜索的性能更好,那么请建议一种搜索算法。用搜索算法代替正则表达式看起来很难看,但如果它表现更好,我会同意。多亏了我读到的帖子,我了解到,如果我把这个放在构造函数中,它只执行一次,而不是把它们包含在我的循环中,那么每次都会执行,那么我可以让regex更快

pattern = Pattern.compile("(?=\\p{InArabic})(?=[a-zA-Z])");
matcher = pattern.matcher("");

共 (1) 个答案

  1. # 1 楼答案

    如果你想找到一条混合线,你真正需要的只是两个边界条件检查
    成功匹配表示混合

       #   "\\p{InArabic}(?=[\\w\\p{Punct}])|(?<=[\\w\\p{Punct}])\\p{InArabic}"
    
       \p{InArabic} 
       (?= [\w\p{Punct}] )
    |  
       (?<= [\w\p{Punct}] )
       \p{InArabic}