web-dev-qa-db-ja.com

文字列パターンマッチングインJava

入力文字列で特定の文字列パターンを検索したい。

例えば.

String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}"

次に、文字列URLに「/{item}/"。 私を助けてください。

これは一例です。実際に必要なのは、URLに「/ {a-zA-Z0-9} /」に一致する文字列が含まれているかどうかを確認することです

17
1355

これにはPatternクラスを使用できます。 {}内のWord文字のみを照合する場合は、次の正規表現を使用できます。 \w[a-zA-Z0-9_]の短縮形です。 _で問題ない場合は、\wを使用するか、[a-zA-Z0-9]を使用します。

String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}";
Pattern pattern = Pattern.compile("/\\{\\w+\\}/");
Matcher matcher = pattern.matcher(URL);
if (matcher.find()) {
    System.out.println(matcher.group(0)); //prints /{item}/
} else {
    System.out.println("Match not found");
}
35
Narendra Yadala

それはただの問題です String.contains

if (input.contains("{item}"))

発生するwhereを知る必要がある場合は、indexOfを使用できます。

int index = input.indexOf("{item}");
if (index != -1) // -1 means "not found"
{
    ...
}

exact文字列のマッチングには問題ありません-実際のpatternsが必要な場合(例えば「3桁の数字の後に最大で2文字のAC」)) 正規表現 を調べる必要があります。

編集:さて、あなたは正規表現を望んでいるようですdo次のようなものが必要な場合があります。

private static final Pattern URL_PATTERN =
    Pattern.compile("/\\{[a-zA-Z0-9]+\\}/");

...

if (URL_PATTERN.matches(input).find())
14
Jon Skeet

文字列が別の文字列に存在するかどうかを確認する場合は、_String.contains_のようなものを使用します

あなたがいくつかを確認したい場合 パターン 文字列に存在する場合、パターンに「。*」を追加して追加します。結果は、パターンを含む文字列を受け入れます。

例:正規表現があるとします a(b|c) 文字列がabまたはacに一致するかどうかをチェックします
.*(a(b|c)).*は、文字列にabまたはacが含まれているかどうかを確認します。

この方法の欠点は、対戦の場所がわからないことです。

3
ChrisBlom

string.indexOf("{item}")を使用して実行できます。結果が-1より大きい場合{item}は文字列にあります

2
zeller