要替换的java正则表达式{var}px带有{var}次{var}px.



我有以下字符串:

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

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

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

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

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

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

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

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

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

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

最新更新