我有以下字符串:
<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循环)。