2014-10-08 2 views
1

regex (및 ColdFusion 9 이상)를 사용하여 HTML에서 Open Graph (og :) 태그를 추출/일치 시키려면 어떻게해야합니까?ColdFusion 정규 표현식으로 og : 태그 구문 분석

<cfset tags = ReMatch('(og:)(.*?)>',html_content)> 

그것은 않습니다 : 내가 가진 모든이입니다 지금까지

<meta property="og:type" content="website" /> 
<meta content="website" property="og:type"/> 

:

그리고 까다로운 비트 즉 인은 다음 예제와 같이 태그 형성 모두 가능한 변형을 포함한다 두 링크 모두 일치하지만 첫 번째 유형에만 콘텐츠 비트가 반환됩니다. 그리고 콘텐츠는 내가 필요한 것입니다.

원하는 출력은 OG 태그가 모두 포함 된 배열이어야합니다 ('유형, 이미지, 작성자, 설명 등이 될 수 있음). 이는 유연해야하며 og : type 예제를 기반으로하지 말아야한다는 것을 의미합니다.

물론 가능하다면 이상적인 출력은 첫 번째 열이 태그 이름이고 두 번째 열이 값 (content)을 포함하는 구조체 일 것입니다. 그러나 이는 후 처리를 통해 달성 될 수 있으며 태그 자체를 추출하는 것만 큼 중요하지 않습니다.

건배, 사이먼 그래서

답변

2

이 같은 배열하려면 [ 'OG : 저자', 'og의 형식', 'OG : 이미지를'...]?

OG 같은 정규 표현식을 사용해보십시오 : ([\ w] +) 당신에게 출발을해야

. 동일한 og : foo 메타 태그가 두 개있는 경우 중복됩니다.

JSoup에서 HTML을 구문 분석 할 수 있습니다. 그것은 훨씬 쉽게 만듭니다.

@abbottmw에서 제안 후, 그래서 CFML

jQuery-like parsing in Java

Parsing, Traversing, And Mutating HTML With ColdFusion And jSoup

+0

안녕하세요, [ '', ' '...] 또는 {'type ':'website ','description ':'설명 '...}과 같은 구조체를 사용하는 것이 더 낫습니다. Thanks 링크를 위해서, 그들을 체크 아웃 할 것입니다 – SimonDau

1

확인에 사용에 대한 몇 가지 좋은 블로그 게시물이 있습니다 (대단히 감사합니다!), 여기에 솔루션입니다 여기에서

다운로드 Jsoup jar 파일 : http://jsoup.org/download

는 다음처럼 시작 이 :

<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> 

그게 전부입니다. og 태그의 전체 목록은 [tags] 배열에 있습니다.

당연히 요청한 정규식 솔루션이 아니지만, 작동합니다!

+0

"당신은 stinkin '정규식이 필요하지 않습니다!;-) 진심으로, 그들과 아무런 문제가 없지만 @abbottmw가 말했듯이, JSoup은 html을 파싱하기위한 더 나은 도구입니다. – Leigh

관련 문제