Regex 使用ColdFusion正则表达式解析og:tags
如果您想使用regex(和coldfusion9+)从html中提取/匹配opengraph(og:)标记,您会怎么做 棘手的一点是必须涵盖标签形成的两种可能变化,如以下示例所示:Regex 使用ColdFusion正则表达式解析og:tags,regex,coldfusion,Regex,Coldfusion,如果您想使用regex(和coldfusion9+)从html中提取/匹配opengraph(og:)标记,您会怎么做 棘手的一点是必须涵盖标签形成的两种可能变化,如以下示例所示: <meta property="og:type" content="website" /> <meta content="website" property="og:type"/> 到目前为止,我得到的是: <cfset tags = ReMatch('(og:)(.*?)&g
<meta property="og:type" content="website" />
<meta content="website" property="og:type"/>
到目前为止,我得到的是:
<cfset tags = ReMatch('(og:)(.*?)>',html_content)>
它确实匹配两个链接,但是只有第一个类型返回了内容位。内容是我所需要的
为了明确起见,所需的输出应该是一个包含所有OG标记的数组(它们可以是“type、image、author、description等”)。这意味着它应该是灵活的,而不仅仅基于og:type示例
当然,如果可能的话,理想的输出应该是一个结构,第一列是标记的名称,第二列包含值(content)。但这可以通过后处理来实现,而不像提取标签本身那么重要
干杯,
Simon那么您想要像['og:author'、'og:type'、'og:image'…]这样的数组吗 尝试使用正则表达式,如og:([\w]+) 这应该给你一个开始。如果您有两个相同的og:foo meta标记,那么您将有重复的标记 您还可以查看以帮助您解析HTML。这样做容易多了 有一些关于在CFML中使用它的好博客文章
好的,根据@abbottmw的建议(非常感谢!),以下是解决方案: 从此处下载Jsoup jar文件: 然后像这样开始:
<cfhttp url="...." result="oghtml" > /*to get your html content*/
<cfscript>
paths = expandPath("/lib/jsoup.jar"); //or wherever you decide to place the file
loaderObj =createObject("component","javaloader.JavaLoader").init([expandPath('/lib/jsoup.jar')]);
jsoup = loaderObj.create("org.jsoup.Jsoup");
doc = jsoup.parse(oghtml);
tags = doc.select("meta[property*=og:]");
</cfscript>
<cfloop index="e" array="#tags#">
<cfoutput>
#e.attr("property")# | #e.attr("content")#<br />
</cfoutput>
</cfloop>
/*以获取html内容*/
path=expandPath(“/lib/jsoup.jar”)//或者在您决定放置文件的任何位置
loaderObj=createObject(“component”,“javaloader.javaloader”).init([expandPath('/lib/jsoup.jar')]);
jsoup=loaderObj.create(“org.jsoup.jsoup”);
doc=jsoup.parse(oghtml);
tags=doc.select(“meta[property*=og:]”;
#e、 attr(“属性”)||#e.attr(“内容”)#
就这样。og标记的完整列表位于[tags]数组中
当然,这不是最初要求的正则表达式解决方案,但是,嘿,它起作用了 嘿,不完全是我想要一个像[“”,…]这样的数组,或者,最好有一个像{'type':'website','description':'this is a description'…}这样的结构。谢谢你的链接,我会检查它们的“你不需要'regex'!;-)说真的,它们没有错,但正如@abbottmw所说的,JSoup是解析html的更好工具。