2012-10-31 19 views
0

需要幫助的嘗試寫一些要麼正則表達式,或者解決一些Adobe Flex的HTML標籤的功能。我們大部分都是固定的,但卻因爲標籤標籤而遇到麻煩。問題是Flex的從它的使用RichTextEditor保存的HTML如下:Java的正則表達式來解決HTML從Flex的

<TEXTFORMAT LEADING="2"> 
<P ALIGN="LEFT"> 
<FONT FACE="Arial" STYLE="font-size: 10pt" size="10" COLOR="#000000" LETTERSPACING="0" KERNING="0"> 
Test Line 1 
</FONT> 
</P> 
<TEXTFORMAT LEADING="2"> 
<P ALIGN="CENTER"> 
<FONT FACE="Arial" STYLE="font-size: 10pt" size="10" COLOR="#000000" LETTERSPACING="0" KERNING="0"> 
Test Line 2 
</FONT> 
</P> 

我們正試圖想出一個辦法來替換P ALIGN =「_ _」與它的等效HTML4標記,例如左,正確,中心,有理。但是我們也需要替換它的結束標籤。

上面的例子會成爲像

<TEXTFORMAT LEADING="2"> 
<left> 
<FONT FACE="Arial" STYLE="font-size: 10pt" size="10" COLOR="#000000" LETTERSPACING="0" KERNING="0"> 
Test Line 1 
</FONT> 
</left> 
<TEXTFORMAT LEADING="2"> 
<center> 
<FONT FACE="Arial" STYLE="font-size: 10pt" size="10" COLOR="#000000" LETTERSPACING="0" KERNING="0"> 
Test Line 1 
</FONT> 
</center> 

任何人做過這樣的事?

+5

每當我閱讀這一個問題標題既'HTML'和'Regex'我畏縮。 – Keppil

+0

這可能是更好的使用HTML解析器而不是正則表達式。 – doublesharp

+0

@Keppil我們是從的Flex快速離開運行的過程,但在此期間必須保持我們的老應用程序的工作......很遺憾。 – idonaldson

回答

0

,我只是想用拖車正則表達式一些手動操作,如下的:

 String startingTagPattern = "<P ALIGN=\"[\\w]\">"; 
     String endTagPattern = "</p>"; 

現在,如果startingTagPattern匹配,獲取匹配的標記線爲:

 String tagLine = match.group(0); 
     String alignString = tagLine.substring(8,tagLine.lastIndexOf("\"")); 

現在你可以將輸出中的標籤爲:

 String startTag = "<"+alignString+">"; 
     String endTag = "</"+alignString+">"; 
0

您可以很好地使用正則表達式來替換p align標籤與他們各自的價值觀。

對於像

<P ALIGN="LEFT">xyz</P><SomeTag></SomeTag><P ALIGN="CENTER">xyz</P>; 

這裏輸入的代碼,

public static void main(String[] args) {   
     String str = "<P ALIGN=\"LEFT\">xyz</P><SomeTag></SomeTag><P ALIGN=\"CENTER\">xyz</P>"; 
     Pattern pattern = Pattern.compile("(?i)<(P ALIGN=\")([^\"]+)([^>]+)>([^<]+)<([^>]+)"); 
     Matcher matcher = pattern.matcher(str); 
     while(matcher.find()) {   
      str = str.replaceFirst(matcher.group(1), ""); // replaces <p align 
      str = str.replaceFirst(matcher.group(3), ""); // replaces the single quote after LEFT or CENTER 
      str = str.replaceFirst(matcher.group(5), "/" + matcher.group(2)); // replaces /P from the ending tag with /LEFT or /CENTER 
     } 
     System.out.println(str); 
    } 

輸出

<LEFT>xyz</LEFT><SomeTag></SomeTag><CENTER>xyz</CENTER>