2

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

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

2 回答 2

3

一般来说,不要使用 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 解析器。

于 2013-06-15T11:26:16.597 回答
3

描述

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

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

在此处输入图像描述

团体

第 0 组从打开锚标记到关闭标记获取整个字符串

  1. 获取使用的引号类型,以便在关闭时正确匹配
  2. 获取别名属性的值
  3. 获取打开和关闭锚标记之间的值。这涵盖了在编辑问题之前来自请求者的原始未编辑问题的可能意图。

示例匹配

给定输入文本:<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
于 2013-06-15T03:28:06.227 回答