2

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");
}

これはバグですか、それとも開始位置を指定した場合、領域内に含まれている場合でも領域を壊していますか?

ありがとう、クリス

4

1 に答える 1

2

Javadocから:

public boolean find(int start)

このマッチャーをリセットしてから [...]

(私のものを強調)

于 2013-01-18T12:15:28.973 に答える