0

"$SE"次の文のキーワードを検索する必要があります。

$SEBGI is there
there is $SE.
there is SE again

出力は次のようになります。

FALSE
TRUE
FALSE

次の正規表現があります。

String patternStr =  "(?i)\\b"+Pattern.quote("$SE")+"\\b";

しかし、それはFALSEすべての文に対して返されます。

助けてください。

4

3 に答える 3

2

これには単語の境界は必要ありません。

最も簡単な解決策は、単語以外の「$SE」と単語以外のシーケンスを再度使用することだと思います。

例えば:

String first = "$SEBGI is there";
String second = "there is $SE.";
String third = "there is SE again";
Pattern pattern = Pattern.compile("\\W\\$SE\\W", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(first);
System.out.println(matcher.find());
matcher = pattern.matcher(second);
System.out.println(matcher.find());
matcher = pattern.matcher(third);
System.out.println(matcher.find());

出力:

false
true
false

ノート:

  • Pattern.quote「問題のある」文字($ )が1つしかないため、使用していないので、エスケープしました。
  • この場合、実際には必要ないため、後読みや先読みは使用していません。
  • Stringに一致するものが含まれているかどうかを確認するためだけに、何も取得しようとしていないため、グループ化は使用していませんPattern
  • あなたがそれを必要とするように見えるので、私はフラグを使用しましPattern.CASE_INSENSITIVEた(あなたの(?i)フラグを見てください - 同じこと)。
于 2013-08-02T15:54:28.110 に答える
0

常に 4 つの個別の式を使用できます。

boolean str_beg = Pattern.matches("^\\$SE\\s", <input_str>);
boolean str_mid = Pattern.matches("\\s\\$SE\\s", <input_str>);
boolean str_end = Pattern.matches("\\s\\$SE$", <input_str>);
boolean str_all = Pattern.matches("^\\$SE$", <input_str>);
boolean matches = str_beg || str_mid || str_end || str_all;
于 2013-08-02T16:05:33.370 に答える