如何在java中提取字符串的特定部分

时间:2014-03-01 08:40:40

标签: java regex substring

从jsp文件中考虑这个语句(在jsp文件中有更多这样的语句..) 声明 -

<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>

我想要的是从“&lt;”中提取(并将其存储在某处)到“&gt;”其中:

< - 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&amp;&amp;在多线...&amp;&amp;它们之间有scriplet标签.. 所以我不知道如何提取这个特定的字符串.. 我尝试使用一些正则表达式,但找不到确切的表达式..

(这只是一个例子&amp;&amp;而不是这个“”标签,它可以是任何东西 再次在这一行:

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

我想从“&lt;”中提取字符串直到“&gt;”其中:

< - 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>"

然而,这个例子和上面提到的差异是这个不是多行而且不包含任何划痕标签 )

有人可以帮我解决这个问题。任何具体方法或正则表达式

3 个答案:

答案 0 :(得分:1)

您可以尝试使用正则表达式,但您可能需要编写一种方法来为您排序,方法是跟踪有多少开放标记和关闭标记出现...但对于正则表达式:&lt; (。*?)&gt; &lt; ---这将搜索&lt;之间的所有内容。和&gt;注意:我在上面的示例中看到的空格标记由&lt; + space分隔。你还必须逃避角色。

答案 1 :(得分:0)

通过char读取您的文本字符。当您到达开场<时,启动计数器并开始向StringBuilder添加字符。当你点击<时,会增加你的计数器并递减任何>。如果你的计数器达到0,退出你的循环并返回StringBuilder.toString()。

答案 2 :(得分:0)

您可以使用正则表达式,但您使用的任何正则表达式的基础必须是不情愿的量词,例如.*?,它不会消耗超过第一个匹配,而a 贪心量词,例如.*会。

这是一个单行:

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

这匹配第一个“&lt;”之间的所有内容和第一个“&gt;”没有以“%”开头并提取它(通过删除其余部分)。