2010-06-17 5 views
20

PHP 함수를 사용하여 짹짹에서 모든 해시 태그를 검색하고 싶습니다.PHP 함수의 짹짹에서 모든 해시 태그 검색

비슷한 질문이 있으신가요? here,하지만 정확히 PHP에서 이것을 구현하는 데 필요한 힌트가 없습니다. 정규식에 익숙하지 않기 때문에 트위터에 모든 해시 태그의 배열을 반환하는 함수를 작성하는 방법을 모르십시오.

preg_match_all('/#[^\s]*/i', $tweet_string, $result); 

: PHP의 모습을 실행

/#[^\s]*/i 

:

#\S*\w 

답변

31
$tweet = "this has a #hashtag a #badhash-tag and a #goodhash_tag"; 

preg_match_all("/(#\w+)/", $tweet, $matches); 

var_dump($matches); 

* 대시는 해시 태그 불법 문자이다는 밑줄이 허용됩니다.

+0

잘 작동, 감사합니다! – snorpey

+1

''$ matches''는 크기가 2 인 배열을 제공합니다. 두 요소 모두 같은 문자열을 가지고 있습니다. 또한 유니 코드 지원되지 않습니다. – trante

+0

이 표현은 내가 찾은 최고의 표현 중 하나입니다. – henrywright

4

이 정규 표현식을보십시오 :이해야합니까, 다음과 같은 정규 표현식을 사용하는 방법에 따라서

결과는 Tweet에있는 모든 해시 태그 ("$ result"- 세 번째 인수로 저장 됨)를 포함하는 배열입니다.

마지막으로이 사이트를 확인하십시오. 나는 정규 표현식을 테스트 할 때 매우 편리하다는 것을 알았다. http://regex.larsolavtorvik.com/

EDIT : 정규 표현식을 사용해 보았는데 너무 좋았습니다!

4

사용 preg_match_all() 기능 :

function get_hashtags($tweet) 
{ 
    $matches = array(); 
    preg_match_all('/#\S*\w/i', $tweet, $matches); 
    return $matches[0]; 
} 
27

내 솔루션을 만들었습니다. 그것은 수행합니다

  • 중복 사람에게 텍스트
  • 에서 존재의 계산에 관한

  • 정렬 해시 태그를 제거하는 문자열에있는 모든 해시 태그를 찾습니다 지원 유니 코드 문자

    function getHashtags($string) { 
        $hashtags= FALSE; 
        preg_match_all("/(#\w+)/u", $string, $matches); 
        if ($matches) { 
         $hashtagsArray = array_count_values($matches[0]); 
         $hashtags = array_keys($hashtagsArray); 
        } 
        return $hashtags; 
    } 
    

출력은 다음과 같습니다.

(
    [0] => #_ƒOllOw_ 
    [1] => #FF 
    [2] => #neslitükendi 
    [3] => #F_0_L_L_O_W_ 
    [4] => #takipedeğerdost 
    [5] => #GönüldenTakipleşiyorum 
) 
+1

+1에 대해서는이 질문에 대한 정말 좋은 해결책이 아닙니다. 고마워요. –

+0

@trante 여전히 작동합니까? 반환 된 배열은 나를 위해 비어 있습니다. 문자열을 어떻게 보이게하거나 인코딩해야합니까? – Tom

+0

일부 유니 코드 문자에서는 작동하지 않습니다. 예. 태국어 # รองเท้า에만 표시됩니다 # รอง เท 태국어의 모음은 포함되어 있지 않습니다. 아래의 @minaz 메서드를 사용하십시오! – supersuphot

11

는 강조한다 : P {PC의} \

$tweet = "Valid hashtags include: #hashtag #NYC2016 #NYC_2016 #gøypålandet!"; 

preg_match_all('/#([\p{Pc}\p{N}\p{L}\p{Mn}]+)/u', $tweet, $matches); 

print_r($matches); 

- 일치

을 강조하기 위해 \ p {N} - 모든 스크립트의 숫자 문자

이 P {L} \ - P {망간} \ 언어

에서 편지 - 비 공간을 표시 (악센트, 움라우트 등)