我想在em标签之间获取字符串,包括其他html。
例如:
<em>UNIVERSALPOSTAL UNION - International Bureau Circular<br />
By: K.J.S. McKeown</em>
输出应为:
UNIVERSALPOSTAL UNION - International Bureau Circular<br />
By: K.J.S. McKeown
请帮帮我。
由于
答案 0 :(得分:3)
使用正则表达式函数,如下所示:
REMatch("(?s)<em>.*?</em>", html)
另请参阅:http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=regexp_01.html
(?s)将模式设置为单行,这样输入文本即使包含换行符也会被解释为一行。 这可能是默认值(我不确定)所以可以省略。正如Peter在评论中指出的那样,这不是默认值,因此必须设置。
.*?
匹配<em>
和</em>
之间的所有字符。乘数之后的问号使其“非贪婪”,以便尽可能少的字符匹配。如果输入html包含<em>foo</em><em>bar</em>
之类的内容,则需要这样做,否则只考虑最外面的<em></em>
标记。
返回的数组包含找到的所有匹配项,即所有文本,包括<em>
标记中的html。
请注意,如果</em>
也作为属性文本出现并且错误地不是html编码,例如:<em><a title="Help for </em> tag">click</a></em>
或在其他罕见情况下(例如javascript脚本标记等),这可能会失败。正则表达式无法替换完整的HTML / XML解析器,如果您需要100%准确性,则应考虑使用一个:http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_t-z_23.html
答案 1 :(得分:2)
如果您的输入完全采用上面给出的格式,您甚至不需要正则表达式 - 只需删除外部标记:
<cfsavecontent variable="Input">[text from above]</cfsavecontent>
<cfset Output = mid( Input, 4 , len(Input) - 9 />
如果你的输入超过这个(即一个重要的HTML或完整的HTML文档),正则表达式仍然不是理想的工具 - 而是你应该使用HTML解析器,例如{ {3}}:
<cfset jsoup = createObject('java','org.jsoup.Jsoup') />
<cfset Output = jsoup.parse(Input).select('em').html() />
(对于CF8,此代码需要将jsoup JAR文件放在CF的lib目录中,或使用JSoup等工具。)
答案 2 :(得分:1)
答案 3 :(得分:0)
我必须删除partiucular标签后要遵循的任何文本。现在,HTML内容是从一个满足5种不同语言的数据库动态生成的。所以我只有div标签来帮助我。我不确定为什么REMatch(&#34;(?s)。*?&#34;,html)对我不起作用。然而,本在这里帮助了我(http://www.bennadel.com/blog/769-Learning-ColdFusion-8-REMatch-For-Regular-Expression-Matching.htm)。我的代码看起来像tghis:
<cfset extContentArr = REMatch("(?i)<div class=""inlineBlock"" style=""margin-right:30px;"">.+?</div>",qry_getContent.colval) />
<cfif !ArrayIsEmpty(extContentArr)>
Loop the array and do whatever you need with the extract , I just deleted them.
</cfif>