2012-07-08 71 views
3

我有以下字符串:java的正则表达式来替换{VAR} PX与{VAR}次{VAR} PX

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

我想用正则表达式来替换所有具有PX之后将它们与X的数字乘以他们的价值。 (X是一个变量)。

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

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

请注意,X必须是一个变量,我将检索功能

+2

你是不是指'80px'? – kennytm 2012-07-08 10:08:55

+0

是的。我编辑了我的问题,谢谢 – Dejell 2012-07-08 10:09:25

+0

我认为如果将它解释为DOM并阅读属性会更好。 – 2012-07-08 10:13:08

回答

7

下面的代码将与240px更换30px字符串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并将其作为替换字符串传递。
  • 最后,再次打印输入字符串,并替换某些字符串。
2

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

  • 使用MACHING比赛
  • 构建重置价值
  • 替代

对不起,没有一个衬垫

  • 提取值的正则表达式解决方案。 (但它并不难,除了你需要一个for循环)。