3

次の文字列があります。

<div height="40px" width="30px" />

後に px を持つすべての数字を X 倍の値で正規表現に置き換えたいと思います。(X は変数です)。

したがって、X=3 の場合、結果は次のようになります。

<div height="120px" width="90px" />

X は、関数に取得する変数でなければならないことに注意してください

4

2 に答える 2

7

次のコードは、正規表現を使用して文字列を に30px置き換えます。240pxs

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Example {
    public static void main(String[] args) {
        String s = "abc 30px def";
        int var = 8;

        Pattern patt = Pattern.compile("([0-9]+)px");
        Matcher m = patt.matcher(s);
        StringBuffer sb = new StringBuffer(s.length());
        while (m.find()) {
            int px = Integer.parseInt(m.group(1));
            String next = String.valueOf(var * px) + "px";
            m.appendReplacement(sb, Matcher.quoteReplacement(next));
        }
        m.appendTail(sb);
        System.out.println(sb.toString());
    }
}

実行する手順は次のとおりです。

  • コンパイルされた正規表現を作成します。これにより、後で正規表現を使用する際のパフォーマンスが向上します。
  • s一致する文字列と各一致を 検索します。
    • 文字列を整数に変換し、 で乗算しますvar
    • 再度追加pxして、置換文字列として渡します。
  • 最後に、特定の文字列を置き換えて、入力文字列を再度出力します。
于 2012-07-08T10:19:32.023 に答える
2

プレーンな正規表現では計算できません。たとえば Perl にはいくつかの拡張機能がありますが、Java では利用できないと思います。したがって、長い道のりを歩む必要があります。

  • マッチングに正規表現を使用する
  • マッチの抽出値
  • 代替価値を構築する
  • 代わりの

申し訳ありませんが、ワンライナーのソリューションはありません。(ただし、for ループが必要であることを除けば、それほど難しくはありません)。

于 2012-07-08T10:21:05.397 に答える