文字列に「stores」、「store」、「product」の順に単語が含まれているかどうかを確認したい。それらの間に何があっても。
someString.contains(stores%store%product);
と.contains("stores%store%product");
を使用してみました
正規表現を明示的に宣言してメソッドに渡す必要がありますか、または正規表現をまったく渡すことができませんか?
String.contains
は、文字列、ピリオドで動作します。正規表現では機能しません。指定された正確な文字列が現在の文字列に表示されるかどうかを確認します。
String.contains
はWordの境界をチェックしないことに注意してください。部分文字列をチェックするだけです。
正規表現は、String.contains
よりも強力です。これは、キーワードに(特に)単語の境界を適用できるためです。これは、substringsではなく、wordsとしてキーワードを検索できることを意味します。
次の正規表現でString.matches
を使用します。
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
RAW正規表現(文字列リテラルで行われたエスケープを削除します-これは、上記の文字列を印刷したときに得られるものです):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
\b
はWordの境界をチェックするため、restores store products
に一致するものは得られません。数字とstores 3store_product
はWordの一部とみなされるため、_
も拒否されることに注意してください。
両側で単語の境界がチェックされるため、上記の正規表現は正確な単語を検索します。つまり、store
なしでWord s
を検索しているため、stores stores product
は上記の正規表現と一致しません。
.
は通常、任意の文字に一致しますexcept多数の改行文字 。最初の(?s)
は、.
を例外なくすべての文字に一致させます(これを指摘してくれたTim Pietzckerに感謝します)。
matcher.find()
は必要なことを行います。例:
Pattern.compile("stores.*store.*product").matcher(someString).find();
Stringクラスのmatches
メソッドを使用するだけです。
boolean result = someString.matches("stores.*store.*product.*");
public static void main(String[] args) {
String test = "something hear - to - find some to or tows";
System.out.println("1.result: " + contains("- to -( \\w+) som", test, null));
System.out.println("2.result: " + contains("- to -( \\w+) som", test, 5));
}
static boolean contains(String pattern, String text, Integer fromIndex){
if(fromIndex != null && fromIndex < text.length())
return Pattern.compile(pattern).matcher(text).find();
return Pattern.compile(pattern).matcher(text).find();
}
1.result:true
2.結果:true
文字列に部分文字列が含まれているかどうか、または正規表現を使用していないかどうかを確認する場合は、find()を使用してください。
private static final validPattern = "\\bstores\\b.*\\bstore\\b.*\\bproduct\\b"
Pattern pattern = Pattern.compile(validPattern);
Matcher matcher = pattern.matcher(inputString);
System.out.print(matcher.find()); // should print true or false.
Matches()とfind()の違いに注意してください。matchs()は、文字列全体が指定されたパターンに一致する場合にtrueを返します。 find()は、指定された入力文字列のパターンに一致する部分文字列を見つけようとします。また、find()を使用することにより、正規表現パターンの先頭に-(?s)。*や末尾に。*のような追加のマッチングを追加する必要がありません。