2015-02-02 4 views
0

나는 페이스 북의 게시물을 텍스트로 반환하는 PHP 함수가 있습니다. 그러나 모든 # -hash 태그를 클릭 할 수 있고 http://www.facebook/hashtags/ {the-hashtag}을 참조하고 싶습니다. 나는 다음과 같은 preg_replace이다와 함께이 일을 시도,하지만 분명히 뭔가 잘못된 일을 해요 :regex에서 역 참조 사용

$postMessage = preg_replace('/#[^(\s|\p{P})]*', '<a href="https://www.facebook.com/hashtag/$1" title="$1"></a>', $postMessage); 

이 예상 링크 출력을, 그래서 정규식은 잘 보이지만, 출력은 다음과 같습니다

<a href="https://www.facebook.com/hashtag/" title=""></a> 

그래서 저는 뒤쪽 참조에서 뭔가 잘못하고 있다고 확신합니다. 그러나 나는 무엇이 확실하지 않습니다.

(? 사이드 질문의 global 매개 변수 preg_replace이다에서 필요하지 않습니다 내가 JS에서 사용하는 데 사용하고 있습니다.)

$postMessage의 예 :

Android Wear testen doen we met de Sony #Smartwatch3. Binnenkort volgt een uitgebreide review op de website ;-) 

출력은 다음과 같아야합니다

Android Wear testen doen we met de Sony <a href="https://www.facebook.com/hashtag/smartwatch3" title="Smartwatch3">#Smartwatch3</a>. Binnenkort volgt een uitgebreide review op de website ;-) 
+0

다른 PHP는 구분 기호,'~ (#의 [^을 \ S] * \ S)를 사용 ~'하고'g' 수정을 추가 할 필요가 없습니다. –

+0

제대로 작동합니다. '$ postMessage'의 내용은 무엇입니까? – Toto

+0

@JESUISCHARLIE 제 편집을 참조하십시오. 어쩌면 뒤에있는 지시어에서 빼야하는'#'과 관련이 있을지도 모른다. –

답변

2

정규식 :

#([^\p{P}\s]*) 

[^\p{P}\s]*은 0 개 이상 구두점이나 공백이 아닌 문자를 나타냅니다.

교체 문자열 :

<a href="https://www.facebook.com/hashtag/$1" title="$1">#$1</a> 

DEMO

PHP 코드는 것,

$re = "/#([^\\p{P}\\s]*)/m"; 
$str = "Android Wear testen doen we met de Sony #Smartwatch3. Binnenkort volgt een uitgebreide review op de website ;-)\n\n"; 
$subst = "<a href=\"https://www.facebook.com/hashtag/$1\" title=\"$1\">#$1</a>"; 

$result = preg_replace($re, $subst, $str); 

+0

거의. 나는 뒤쪽 참조에서'# '을 빼야 만합니다. 나는. 실제 출력은 '{MATCH}'이어야합니다. –

+0

내 업데이트 참조 .. –