java - Matcher.find (int start) 不在某个区域内工作

标签 java regex replace

我正在尝试在 JTextArea 中的选择范围内进行匹配,并且我正在使用 Matcher.region() 来定义匹配的边界:

JTextComponent t;

Pattern p = Pattern.compile("string", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher m = p.matcher(t.getText()).region(t.getSelectionStart(), t.getSelectionEnd());
m.useAnchoringBounds(false);

if(m.find()) {
  System.out.println("Found match from " + m.start() + " to " + m.end());
}
else {
  System.out.println("No match found");
}

以上内容按预期工作,它将找到该区域内的第一个匹配项 - 如果未找到匹配项,则它找不到匹配项。

但是,我试图循环遍历区域内的匹配项(搜索和替换类型函数),如果我指定 find() 的起始位置位于区域内,则它会匹配区域外:

int cPos = m.regionStart();
if (m.find(cPos) || m.find(m.regionStart())) {
  System.out.println("Found match from " + m.start() + " to " + m.end());
  cPos = m.end();
}
else {
  System.out.println("No match found");
}

这是一个错误,还是如果我指定起始位置(即使它包含在该区域内),我是否会破坏该区域?

最佳答案

来自Javadoc :

公共(public) boolean 查找(int start)

Resets this matcher and then [...]

(强调我的)

关于java - Matcher.find (int start) 不在某个区域内工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398683/

相关文章:

javascript - Jquery字符串替换,仅替换数组的开头

java - 在JDK 1.6上开发webservice客户端,需要兼容JDK 1.5.03

regex - 谷歌电子表格 : Any Regex Replace

java - 如何用正则表达式提取带有数字的文本后的数字?

python - 期间停止 Python 中的多行正则表达式替代?

python - 如何克隆可迭代并递归替换特定值?

python - 如何删除数据框中的回车

java - 丰富的文件系统

java - 这真的是动态多态吗?当我们使用 new 操作符实例化一个类时,编译器可以获得哪些信息?

java - 在java中将多个if语句组合为一个输入