使用 ColdFusion,如何从下面的字符串中获取“我的链接别名”部分?如果有帮助,它将始终使用“别名”属性。
<a href="http://www.google.com" alias="my link alias">learn more</a>
使用 ColdFusion,如何从下面的字符串中获取“我的链接别名”部分?如果有帮助,它将始终使用“别名”属性。
<a href="http://www.google.com" alias="my link alias">learn more</a>
一般来说,不要使用 regex 使用jsoup(或其他 HTML 解析器) - 它基本上是:
<cfset Alias = jsoup.parse(input).select('a[alias]').attr('alias') />
有关更多信息,Henry 发布了Ben Nadel 的博客文章的链接,还有Ray Camden的博客文章,如果您在 SO 上搜索,您会发现大量 jSoup/CF 问题,其中包含有用的信息。
如果您只处理您提供的格式的字符串(即只是一个 A 标记,而不是整个 HTML 块),您可以这样做很简单:
<cfset Input = '<a href="http://www.google.com" alias="my link alias">learn more</a>' />
<cfset Parts = Input.split('\salias="',2) />
<cfset Alias = ListFirst(Parts[2],'"') />
或者处理可能的空格和单引号或双引号:
<cfset Input = '<a href="http://www.google.com" alias="my link alias">learn more</a>' />
<cfset Parts = Input.split('\salias\s*=\s*(?=["''])',2) />
<cfset Alias = ListFirst( Parts[2] , Left(Parts[2],1) ) />
但是,如果您不确定标记是什么,请改用强大的 HTML 解析器。
您可以使用这个需要a
标签的正则表达式,并且不会意外匹配以 . 开头的任何其他标签a
。它还允许在属性值周围使用双引号或单引号。在这个特定的问题上,肯定前瞻的价值可能会丢失,因为我们只检查一个属性,如果您要捕获多个属性,那么可以使用多个前瞻来以任何顺序捕获属性。
<a\b(?=[^>]*\s\balias=(["'])((?:(?!\1)|.)*)\1)[^>]*>(.*?)<\/a>
第 0 组从打开锚标记到关闭标记获取整个字符串
给定输入文本:<a href="http://www.google.com" alias="my link's alias">learn more</a>
[0] => <a href="http://www.google.com" alias="my link's alias">learn more</a>
[1] => "
[2] => my link's alias
[3] => learn more