Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用ColdFusion正则表达式解析og:tags_Regex_Coldfusion - Fatal编程技术网

Regex 使用ColdFusion正则表达式解析og:tags

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

如果您想使用regex(和coldfusion9+)从html中提取/匹配opengraph(og:)标记,您会怎么做

棘手的一点是必须涵盖标签形成的两种可能变化,如以下示例所示:

<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的更好工具。