0

フレーズ文字列をファイルストリーム内のフレーズに一致させる方法を理解するのに問題があります。私が扱っているファイルには、次のようなランダムな単語が含まれています。

3 little pigs built houses and 1 little pig went to the market

多くの行など。パターン文字列に特殊文字が含まれている可能性があるため、正規表現で特別な意味を持つ代わりに、それらを見つけることができるようにフラグがV++ **A必要です。LITERAL

私のパターンはpattern = Pattern.compile(searchString, Pattern.LITERAL);

little pigパターン文字列として「」を使用するmatcher.find()と、「littlepig」と「littlepigs」の2つの一致を見つけることができます。しかし、私はそれを「小さなブタ」と一致させたいだけです。

私に何ができる?matcher.lookingAt()またはを使用することを考えmatcher.matches()ましたが、一致するファイル文字列フレーズが別々の行にあることに依存できない場合に、適切な領域を設定する方法がわかりません。

4

4 に答える 4

0

「小さなブタ」は、スペースやラインフィードなどの他のキャラクターによって絶えず終了していますか?次に、これをパターンに追加します。

String pattern = "(little pig)[ \\r\\n]+";
于 2011-03-16T08:05:09.990 に答える
0

little pig文字列を1回だけ含むすべての行に一致するこのパターンはどうですか?

^.*little pig.*$

を含む:

  • ^行の開始
  • .*0個以上の文字
  • $行の終わり
于 2011-03-16T08:11:33.673 に答える
0
String poet = "3 little pigs built houses and 1 little pig went to the market";
Pattern p = Pattern.compile("(little pig)\\B");
Matcher m = p.matcher(poet);
List<String> idx = new ArrayList<String>();
idx.add(m.group());
System.out.println(idx);
于 2011-03-16T08:24:29.443 に答える
0

編集4(最後の1つ):\\s|^最初に必要なことを完全に忘れました

編集3:searchStringの後の文字が文字列の終わりである可能性があることを考慮に入れるために少し調整しましたsearch P = Pattern.compile("\\s"+Pattern.quote(searchString)+"(\\s|$)");

編集2:わかりました。わかりました。searchP = Pattern.compile("\\s"+Pattern.quote(searchString)+"\\s");

なぜ私がその引用方法に気づかなかったのかわかりません...まあ、すべてが初めてです:)

編集:私は自分より先に進んだことがわかりました-literalPはsearchPでStringに変換されLITERAL、ユーザーStringのルールが失われるため、コードは特殊文字にはまったく役立ちませんでした。

わかったと思います!以下は、ユーザーの文字列をリテラルに変換してから、を許可する新しいパターンに配置します\\s。ただし、問題が発生した場合はお知らせください。

Pattern literalP = Pattern.compile(searchString, Pattern.LITERAL);
Pattern searchP = Pattern.compile("\\s"+literalPattern+"\\s+");
于 2011-03-16T15:56:32.420 に答える