4

だから私はmyString文字列を含むものを持っています

"border-bottom: solid 1px #ccc;width:8px;background:#bc0b43;float:left;height:12px"

正規表現を使用して、含まれていることを確認したい"width:8px" (\bwidth\s*:\s*(\d+)px)

true の場合、幅の値 (上記の例では 8) を myList に追加します。

試み:

if (myString.contains("\\bwidth\\s*:\\s*(\\d+)px")) {
    myList.add(valueofwidth) //unsure how to select the width value using regex
}

何か助けはありますか?

編集:メソッドを調べたcontainsところ、正規表現が許可されていないことがわかりました。matches正規表現を許可しますが、代わりに完全な一致を探します。

4

3 に答える 3

5

Matcher#find()そのためにはメソッドを使用する必要があります。

ドキュメントから: -

パターンに一致する入力シーケンスの次のサブシーケンスを見つけようとします。

そして、そこからキャプチャされたグループを取得できます: -

Matcher matcher = Pattern.compile("\\bwidth\\s*:\\s*(\\d+)px").matcher(myString);

if (matcher.find()) {
    myList.add(matcher.group(1));
}
于 2012-12-26T11:41:25.487 に答える
4

Matcher と matcher.find() を使用する必要があります。

Pattern pattern = Pattern.compile("(\\bwidth\\s*:\\s*(?<width>\\d+)px)");
Matcher matcher = pattern.matcher(args);
while (matcher.find()) {
    myList.add(matcher.group("width");
}
于 2012-12-26T11:42:12.077 に答える
2

あなたの主な問題はcontains()、正規表現を受け入れず、リテラル文字列を受け入れることです。
matches()一方、正規表現パラメーターを受け入れますが、true を返すには文字列全体に一致する必要があります

次に、一致が得られたら、 を使用replaceAll()してターゲット コンテンツを抽出できます。

if (myString.matches(".*\\bwidth\\s*:\\s*\\d+px.*")) {
    myList.add(myString.replaceAll(".*\\bwidth\\s*:\\s*(\\d+)px.*", "$1"))
}

これにより、入力文字列全体が、元の正規表現がキャプチャしたグループ #1 の内容に置き換えられます。

元の一致する正規表現から冗長なブラケットを削除しましたが、ターゲットコンテンツをキャプチャするために置き換えのために残したことに注意してください。

于 2012-12-26T11:39:31.267 に答える