2014-03-01 40 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"); 

这个匹配之间的所有内容,并包括未用“%”开头,提取它的第一个“<”和第一“>”(通过去除休息)。