如何从超链接获取自定义属性的值?

时间:2013-06-14 20:37:17

标签: regex parsing coldfusion

使用ColdFusion,如何从下面的字符串中获取“my link alias”部分?如果有帮助,它将始终使用“别名”属性。

<a href="http://www.google.com" alias="my link alias">learn more</a>

2 个答案:

答案 0 :(得分:3)

描述

您可以使用此正则表达式,该正则表达式需要a标记,并且不会意外地匹配以a开头的任何其他标记。它还允许围绕属性值的双引号或单引号。这里的正向前瞻的值可能在这个特定问题上丢失了,因为我们只检查单个属性,如果你想要捕获多个属性,那么可以使用多个前瞻来按任意顺序捕获属性。

<a\b(?=[^>]*\s\balias=(["'])((?:(?!\1)|.)*)\1)[^>]*>(.*?)<\/a>

enter image description here

组0从打开的锚标记到关闭标记

获取整个字符串
  1. 获取所使用的引用类型,以便在关闭时正确匹配
  2. 获取别名属性
  3. 的值
  4. 获取open和close锚标记之间的值。这涵盖了在编辑问题之前来自请求者的the original unedited question的可能意图。
  5. 示例匹配

    给定输入文字:<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解析器。