java regex用{var}次{var} px替换{var} px

时间:2012-07-08 10:06:20

标签: java regex variables

我有以下字符串:

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

我想用正则表达式替换所有带有px的数字后面的X乘以它们的值。 (X是变量)。

因此,如果X = 3,结果将是

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

请注意,X必须是我将检索到函数的变量

2 个答案:

答案 0 :(得分:7)

以下代码将使用正则表达式将30px替换为字符串240px中的s

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并将其作为替换字符串传递。
  • 最后,再次打印输入字符串并更换某些字符串。

答案 1 :(得分:2)

普通正则表达式不能计算。有一些扩展,例如在Perl中,但我不认为它们在Java中可用。所以你必须走得很远:

  • 使用正则表达式进行加工
  • 提取匹配值
  • 构建替换值
  • 替代

抱歉,没有单线解决方案可用。 (但这并不难,除了你需要一个for循环)。