2013-03-22 122 views
3

我想解析我從twitter中獲取的tweet中的hashtags。現在,我沒有在api中找到任何可用的東西。所以,我使用php自己解析它。我嘗試了幾件事情。在twitter API中解析hashtags PHP

<?php 
$subject = "This is a simple #hashtag"; 
$pattern = "#\S*\w"; 
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); 
print_r($matches); 
?> 

我也試過

$pattern = "/[#]"."[A-Za-z0-9-_]"."/g"; 

但後來它顯示/ g的PHP不認可。我一直在嘗試這麼做很長一段時間,但我無法做到這一點。所以請幫助。

P.S. :我對Regular Experssions有一點點想法。

+0

第一個沒有工作,因爲你沒有指定分隔符,在開始和結束的斜線。 PHP無法識別'g'-flag,因爲preg_match_all會自動匹配所有發生的事件(這就是該標誌的作用)。你可能想試試'/#[a-z0-9 \ -_] +/i'?注意:'i'-flag使正則表達式不區分大小寫。 – 2013-03-22 19:31:57

+0

'/ g' ==''preg_match_all()'中的'_all'。在第一個中,你忘記了正則表達式的分隔符,在第二個中,你有一個錯誤的修飾符。如果這些東西是固定的,那麼兩者中的任何一個都可以很好地工作。 – Wrikken 2013-03-22 19:33:13

+0

非常感謝。有用。其實我也試過「/ [#] [A-Za-z0-9 -_] /」。然後它說沒有指定分隔符。然後我試着「/ [#] [A-Za-z0-9 -_] [/ \ t]」..然後它說未知修飾符''。 – 2013-03-22 19:36:38

回答

1

你需要考慮,其中一個主題標籤可能會出現。有三種情況:

  • 在鳴叫的開始,空白後
  • 在一個字的中間 - 這不能算作一個主題標籤。

因此,這將正確地匹配他們:

'/(^|\s)\#\w+/' 

說明:

  • ^可以OR聲明
  • \s使用用於捕獲空格,製表符和新行

下面是完整的代碼:

<?php 
$subject = "#hashtag This is a simple #hashtag hello world #hastag2 last string not-a-hash-tag#hashtag3 and yet not -#hashtag"; 
$pattern = "/(?:^|\s)(\#\w+)/"; 
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); 
print_r($matches); 
?> 
+1

好的。非常感謝。 我剛剛讀了更多關於正則表達式的內容。謝謝。 :) – 2013-03-22 20:00:32

0

這個工作對我來說:

$subject = "This is a simple #hashtag hello world #hastag2 last string #hashtag3"; 
$pattern = "/(#\w+)/"; 
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); 
print_r($matches); 
+0

非常感謝。有用。但它與「/ [#] [A-Za-z0-9 - ] /」不同嗎? – 2013-03-22 19:40:44

+3

這將匹配不是話題標籤中間的話題標籤。 – 2013-03-22 19:45:04