使用ColdFusion,如何从下面的字符串中获取“my link alias”部分?如果有帮助,它将始终使用“别名”属性。
<a href="http://www.google.com" alias="my link alias">learn more</a>
答案 0 :(得分:3)
您可以使用此正则表达式,该正则表达式需要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
答案 1 :(得分:3)
一般情况下,不使用正则表达式使用jsoup (或其他HTML解析器) - 基本上是这样的:
<cfset Alias = jsoup.parse(input).select('a[alias]').attr('alias') />
有关更多信息,亨利发布了一个link to a blog post by Ben Nadel,还有一个blog post by 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解析器。