小编dar*_*r07的帖子

如何在Java中使用正则表达式查找字符串中最后一组字符?

我需要找到字符串中字符集的最后一个索引。考虑字符集为x,y,z和string作为Vereador Luiz Pauly Home,那么我需要index为18

因此,寻找索引我已经创建了一个模式DOTALL标志和贪婪量词*(S?)。(X | Y | Z) 。当模式应用于该字符串(多行)时,我可以从起始组中找到索引。代码:

int findIndex(String str){
  int index = -1;
  Pattern p = Pattern.compile("(?s).*(x|y|z)");
  Matcher m = regex.matcher(str);
  if(m.find()){
    index = m.start(1);
  }
  return index;
}
Run Code Online (Sandbox Code Playgroud)

如预期的那样,如果匹配,它将正确返回值。

但是,如果没有匹配项,则它花费的时间太长(600000个字符需要17分钟),因为它是贪婪的匹配项。

我尝试了其他量词,但无法获得所需的输出。那么,谁能推荐更好的正则表达式呢?

PS:我也可以考虑从最后遍历内容并找到索引。但是我希望正则表达式中有更好的方法可以快速完成工作。

java regex regex-greedy

6
推荐指数
1
解决办法
247
查看次数

标签 统计

java ×1

regex ×1

regex-greedy ×1