2015-04-03 63 views
0

我的目標是收集鳴叫般的字符串的每個哈希標籤爲:preg_match_all切漁獲

$string = "i like to #studyéléctricité in french"; 
preg_match_all('/#(\w+)/',$string,$hashtags); 

它正確地抓住了這個主題標籤不帶重音,並將它們放入數組$#標籤。

但隨着我的字符串,它會收集只有正常捕撈的一部分,切斷它的第一個強調字符遇到:

var_dump(mb_detect_encoding($string)); 
var_dump($hashtags[0]); 

它返回

字符串「UTF-8 '(長度= 5)

陣列(大小= 1)0 =>字符串 '#study'(長度= 6)

解測試:

1)字符串在UTF-8所以我嘗試特定的正則表達式

preg_match_all('/#(\w+)/u', $string, $hashtags); 
preg_match_all('/#(pL+)/u', $string, $hashtags); 
preg_match_all('/#(p{L}+)/u', $string, $hashtags); 
preg_match_all('/#(\pL+)/u', $string, $hashtags); 
preg_match_all('/#(\p{L}+)/u', $string, $hashtags); 

這些所有返回的空陣列。

2)我試圖改變編碼成ISO-8859-15:

$string = mb_convert_encoding($string, 'ISO-8859-15', 'UTF-8'); 
preg_match_all('/#(\w+)/',$string,$hashtags); 
var_dump(mb_detect_encoding($string)); 
var_dump($hashtags[0]); 

它返回:

字符串 'ASCII'(長度= 5)

陣列(大小= 1)0 =>字符串'#studylctricit'(長度= 14)

3)我也嘗試過iconv:

$string = iconv($string, 'UTF-8', 'ISO-8859-15'); 
preg_match_all('/#(\w+)/',$string,$hashtags); 
var_dump(mb_detect_encoding($string)); 
var_dump($hashtags[0]); 

它返回:

字符串 'ASCII'(長度= 5)

陣列(大小= 1)0 =>字符串 '#study'(長度= 6)

我該如何在這種情況下收集帶有突出字符的#標籤?

感謝您提前給我們提供任何幫助或建議!

傑夫

回答

0

在PHP中,你可以捕捉這些信件與\p{L}+正則表達式和u選項:

$string = "i like to #studyéléctricité in french"; 
preg_match_all('/#(\p{L}+)/u',$string,$hashtags); 
print_r($hashtags); 

這是working sample program

輸出:

Array                                                             
(                                                              
    [0] => Array                                                          
     (                                                            
      [0] => #studyéléctricité                                                     
     )                                                            

    [1] => Array                                                          
     (                                                            
      [0] => studyéléctricité                                                      
     )                                                            

)