java html 字符串截取字符串,关于正则表达式:Java字符串处理HTML标记

我有一个带有一些文本和html的java字符串:

test title

blabla bla more text

我想要实现的目标有两个:

1)检索的内容,并将其保存在单独的字符串中。

2)删除原始字符串的该部分:test title

因此最终结果将是

originalString:

test title

blabla bla more text

newString:

blabla bla more text

pageTitle:test title

我该如何实现? 常用表达?

我真的无法掌握...

这相关吗? stackoverflow.com/questions/240546/

这是使用正则表达式提取标题标签之间的文本的方式:

String s ="test title";

Pattern p = Pattern.compile("(.*?)");

Matcher m = p.matcher(s);

while(m.find()){

System.out.println(m.group(1));

}

这是绅士的方式!

该答案中的错误:(1)HTML不区分大小写; (2)点将不匹配行终止符; (3)您忘记考虑标准属性; (4)您不应在注释或脚本标签内进行匹配; (5)最小匹配项不能保证其在格式错误的输入中不会包含重复的打开标记(6)您不应在带引号的属性内进行匹配。可能还有更多错误,但是这些错误只是我的头上问题。尽管如此,这可能会解决他的问题。那这告诉你什么?

不要使用正则表达式来解析HTML! 尝试使用JTidy或任何适合您的Java开源HTML解析器。

使用这些库将使您的生活更加轻松,因为它们旨在解析HTML。 您可以获取所需的节点并从中提取文本。

你不觉得你有点苛刻吗?

@tchrist我如何严厉?

您之所以严厉是因为您不知道张贴者的确切情况。在有限的情况下,可以使用模式来匹配HTML以达到良好的效果。标准的SO教条虽然有充分的用心,但是却可以说是过分杀伤力。如果您知道您的输入集,它就不太难了。如果没有,那就是。请参阅我的其他较长评论。

@tchrist,我的立场不是教条。无论哪种情况,我都坚信使用正则表达式解析HTML是一个坏主意。我同意您的意见,即在有限的输入集下它们可能很有用(我本人已将它们用于perl单线或sed中),但我还是要谨慎一点,并提一下为什么在这种情况下不使用正则表达式好主意。我尤其从未使用过正则表达式来解析生产代码中的HTML。我更喜欢使用一种不易出错,更可维护且更可靠的方法(HTML解析器)。

Vivin,我有时在我自己以编程方式生成的离散HTML上使用模式匹配。就像旧的"暮光区"一样,"我们控制垂直;我们完全可以控制水平。"这绝对是安全的,但我对此可能要比99.9%的程序员更为谨慎。否则,我会使用HTML解析类。无法想象在未知的HTML上使用模式。我只是拒绝标准的SO教条,因为它过于挑剔和轻率。我想我应该找到所有这些教条的出处,并以有力的条件加以修改。

@tchrist我同意。只要问题域很小,那么正则表达式就足够了;我通常发现这是例外,而不是规则:)

不建议使用正则表达式解析XML / HTML。 但是,如果您绝对必须执行您要求的操作,请尝试以下操作:

package org.apache.people.mclark.examples.regex;

import java.util.regex.*;

public class Regex1 {

public static void main(String[] args) {

final String subjectString ="test title

" +

"blabla bla more text";

Pattern regex = Pattern.compile("(.*?)(.*)",

Pattern.DOTALL);

Matcher regexMatcher = regex.matcher(subjectString);

if (regexMatcher.find()) {

String pageTitle = regexMatcher.group(1);

String leftOvers = regexMatcher.group(2);

System.out.println("pageTitle[" + pageTitle +"]");

System.out.println("leftOvers[" + leftOvers +"]");

} else {

System.out.println("no match");

}

}

}

任何不当行为我都要洗手!

你不是说不可能;您的意思是在一般情况下很难解决。 (或者您只在谈论教科书的正则表达式,而不是在谈论现代模式。)如果谈论的是带有已知有限输入集的装配式演示,这可能会比做起来容易一些。也许他有其中之一。也许他没有。

tchrist,正则表达式不是递归的,因此它不能匹配嵌套的平衡标签。 regex的一些风味最近已添加了递归结构,但它们很难使用。也许"不可能"是一个很强的词,正则表达式可能有很多事情(但不建议)。实际上,我只是从regex标签wiki @ stackoverflow.com/tags/regex/info引用标准的SO教条。某些问题的难度很高,以至于新手很难正确实施。

现代模式当然是递归的。但是,使用它们来匹配HTML非常容易出错,并且在一般情况下很困难,以致不值得付出努力。仅对于完全受限的已知特征输入集,它才能轻松工作,尽管在那种情况下,它通常可以做得很好。碰到的输入很少像人们认为的那样有限。

stackoverflow.com/questions/4031112/regular-expression-matching/ <

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值