您好以下代码,我使用以下代码从页面中删除我不知道的内容:
我正在使用正则表达式,我不能使用jsoup,请不要提供任何jsoup链接或代码,因为这对我来说没用。
<cfset removetitle = rereplacenocase(cfhttp.filecontent, '<title[^>]*>(.+)</title>', "\1")>
现在以同样的方式,我想使用以下内容:
1. <base href="http://search.google.com">
2. <link rel="stylesheet" href="mystyle.css">
3. and there are 5 tables inside the body, i want to remove the 2nd table.,
任何人都可以指导这个
答案 0 :(得分:7)
Scott是对的,Leigh was right之前,当你提出类似的问题时,jSoup是你最好的选择。
关于正则表达式解决方案。正则表达式可以实现这一点,但正则表达式无法解决问题。例如,如果第一个或第二个表包含嵌套表,则此正则表达式将跳闸。 (请注意,表之间不需要文本,我只是证明表之间可以有事情)
(如果总是有一个嵌套表,正则表达式可以处理它,但如果有时候有嵌套表,换句话说:未知),它会变得更加混乱。)
<cfsavecontent variable="sampledata">
<body>
<table cellpadding="4"></table>stuff
is <table border="5" cellspacing="7"></table>between
<table border="3"></table>the
<table border="2"></table>tables
<table></table>
</body>
</cfsavecontent>
<cfset sampledata = rereplace(sampledata,"(?s)(.*?<table.*?>.*?<\/table>.*?)(<table.*?>.*?<\/table>)(.*)","\1\3","ALL") />
<cfoutput><pre>#htmleditformat(sampledata)#</pre></cfoutput>
这是做什么的
(?s)
套。也匹配换行符。
(.*?<table.*?>.*?<\/table>.*?)
匹配第一个表,第一个表以及它与第二个表之间的所有内容之前的所有内容,并将其设置为捕获组1。
(<table.*?>.*?<\/table>)
匹配第二个表并创建捕获组2。
(.*)
匹配第二个表之后的所有内容并创建捕获组3。
然后第三个参数\1\3
选择第一个和第三个捕获组。
如果您可以控制源文档,则可以创建类似
的html注释<!-- table1 -->
<table>...</table>
<!-- /table1 -->
然后在正则表达式中使用它,最后得到一个更加正则表达式的文档。
然而,斯科特说,最好不要使用适当的工具来完成任务:
这就像告诉木匠,给我建房子,但不要用锤子。
这些工具的创建是因为程序员经常遇到你正在遇到的问题,因此他们创建了一个工具,并且经常自由地共享它,因为它可以更好地完成工作。