3

我有以下字符串:

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

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

所以如果 X=3,结果将是

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

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

4

2 回答 2

7

以下代码将使用正则表达式替换字符串中的30pxwith :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 回答