2014-03-01 84 views
0

考慮從JSP文件這個聲明(還有更多的語句像這樣的JSP文件。) 聲明 -如何提取的java字符串的特定部分

<h:dataGrid something styleclass="styleclass1" something1 
onClick="event" something2 
<% this is a scriplet tag %> 
something3 
style="style1"> 

<h:output text>hello i am text</h:output text> 

</h:dataGrid> 

我想是提取(和它存儲在某處)的部分從 「<」 到 「>」,其中:

< - is the one in "<h:dataGrid" 
> - is the one in "style1>" and not the('>') one that appears in the end 
    of "</h:dataGrid>" or "<h:output text>" or "</h:output text>" 

問題是文本的b/W & &在多線... & &有s個criplet它們之間的標籤.. 所以我不知道如何提取這個特殊的字符串.. 我試着用一些使用正則表達式,但無法找到確切的..

(這只是一個例子& &,而不是這種「」標記也可以在這一行是什麼樣 再次:

<h:output text>hello i am text</h:output text> 

我想提取字符串「<」錢櫃「>」其中:

< - is the one in starting of "<h:output text>" 
> - is the one in ending of "<h:output text>" and not the one in "</h:output text>" 

然而差值B/W該exmple和上面提到的一個是,這個人是不是多行,並且不包含任何scriplet標籤 )

能有人幫我出去this..any具體方法還是正則表達式?

回答

0

通過字符讀取您的文本字符。當你到達你的開場<啓動一個計數器,並開始添加字符到StringBuilder。當你點擊更多< s增加你的計數器並減少任何>。如果你的計數器達到0,退出你的循環並返回StringBuilder.toString()。

1

你可以試試正則表達式,但你可能需要寫一個方法來爲你排序,通過跟蹤有多少開放標籤和關閉標籤出現......但對於正則表達式:<(。*?)> < - - 這將搜索<和>之間的所有內容:注意:我在上面的示例中看到的空間中的標記由< +空格分隔。你還必須轉義角色。

0

您可以使用正則表達式,但您使用必須有一個不願量詞任何正則表達式,如.*?的基礎,這不會消耗過去的第一場比賽,而貪婪量詞如.*意志。

這裏的一個單行:

String target = jsp.replaceAll("(?s)^.*?(<.*?[^%]>).*", "$1"); 

這個匹配之間的所有內容,幷包括未用「%」開頭,提取它的第一個「<」和第一「>」(通過去除休息)。