返回列表 发帖

求助]将html源文件中的所有文字节点替换为为<text>

需要构造web页面的后缀树,将html源文件中的所有文字节点替换为为<text>,请教各位正则该如何写。
  1. String bHtml = "<body><p>content1</p><form><textarea>content2</textatea>"
  2.                          +"<a>content3</a></body></html>";
  3.                
  4. bHtml = bHtml.replaceAll("(?!<(\\S*?)[^>]*>.*?|<.*? />)+","<text>");       
  5. System.out.println(bHtml);
  6. 期望输出为:
  7. <body><p><text></p><form><textarea><text></textatea>
  8. <a><text></a></body></html>
复制代码

试一下这个:
  1. bHtml = bHtml.replaceAll("(?<=>)[^<>]+(?=<)", "<text>");
复制代码
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

高手啊,学习中
谢谢!!

TOP

原理:左边有>, 右边有<,中间没有>或<。
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

回复 4# rex

请教高手,有没有能自动生成正则表达式的工具。就是说我给出一段html代码,能够自动生成针对该段代码的正则表达式?
呵呵,是不是太理想了~~

TOP

这个,不太可能吧。程序不知道你需要的匹配精度。
例如,如果你给出的html代码是
<html>empty</html>
它可以生成.*,就能匹配所有的文本,但是该正则式显然不是你所需要的。(激进的正则式)
它也可以生成<html>empty<\/html>,也能匹配你的文本,但是显然也不是你需要的。(保守的正则式)

如果要生成符合题义的正则式,应该是给出多组文本,让程序总结规律,生成正则表达式的建议,供使用者参考,这样才比较靠谱吧。可参考文章:关于从普通文本提取正则表达式的再思考
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

回复 6# rex


    学习了,谢谢!

TOP

回复 2# rex
bHtml = bHtml.replaceAll("(?<=>)[^<>]+(?=<)", "<text>");
该语句中中间部分的[^<>]+我能理解是任何不为<或>的字符,但是前面的(?<=>)和后面的(?=<)是什么意思,正则表达式中“?”的意思不是匹配0或1个吗,放在开头什么意思i,?<=又是什么意思,迷惑中,望解答
~~~

TOP

请参考一下这个贴子: http://regex.me/thread-798-1-1.html
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

回复 9# rex

看懂了,谢谢
另外,最近做点小项目,需要针对html文件写正则表达式,有什么材料能推荐下吗?方面的话发我邮箱,coolfeng_001@163.com

TOP

返回列表