2012-07-08 46 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循環)。