2013-08-06 118 views
-1

我想從長字符串文本中提取特定的信息。文字是:使用正則表達式從文本中提取信息

評級:明確得分:17個標籤:圍裙金色的brown_eyes itaru_chokusha kirigaya_kazuto長頭髮的乳頭no_bra nopan裸體sword_art_online yuuki_asuna用戶:openui

我想提取它們作爲

  1. 評級:明確
  2. 得分:17
  3. 標籤:apron blonde_hair brown_eyes itaru_chokusha ki rigaya_kazuto長頭髮sword_art_online yuuki_asuna
  4. 用戶:openui

我想只能取出頭

$imageTitle = "Rating: Explicit Score: 17 Tags: apron blonde_hair brown_eyes itaru_chokusha kirigaya_kazuto long_hair nipples no_bra nopan nude sword_art_online yuuki_asuna User: openui"; 
preg_match_all("/[a-z]{1,}\:\s/i", $imageTitle, $matches); 
var_dump($matches); 

我終於用(.*)嘗試,但它給整個文本中的代碼。這個只提取一個詞

preg_match_all("/[a-z]{1,}\:\s[a-z0-9]{1,}/i", $imageTitle, $matches); 
//Output 
array (size=1) 
    0 => 
    array (size=4) 
     0 => string 'Rating: Explicit' (length=16) 
     1 => string 'Score: 17' (length=9) 
     2 => string 'Tags: apron' (length=11) 
     3 => string 'User: openui' (length=12) 

如何提取剩餘信息?並且如果可能的話,也可以作爲數組索引和值。

+0

之前,你可以寫一個正則表達式,你必須能夠描述,在英語中,規則是你」重新嘗試實施。你所說的是數據應該如何出來的一個例子,但不是解釋爲什麼。 –

+0

@AndyLester,我想處理它們進入數據庫。 – mrN

回答

0

preg_match_all應該工作:

$s = 'Rating: Explicit Score: 17 Tags: apron blonde_hair brown_eyes itaru_chokusha 
     kirigaya_kazuto long_hair sword_art_online yuuki_asuna User: openui'; 

if (preg_match_all('#\s*(.+?(?=((^|\s)[A-Z][a-z]*:\s*|$)))#i', $s, $arr))  
    print_r($arr[1]); 

OUTPUT:

Array 
(
    [0] => Rating: Explicit 
    [1] => Score: 17 
    [2] => Tags: apron blonde_hair brown_eyes itaru_chokusha kirigaya_kazuto long_hair sword_art_online yuuki_asuna 
    [3] => User: openui 
) 
+0

我得到了'(\ w +):([^:] +)(?= $ | \ w + :)'在http://fiddle.re/r763a的Java下工作,但無法使其工作與PHP/preg_match。任何想法爲什麼? –

+0

請參閱**工作演示:http://ideone.com/zHf4QJ** – anubhava

+0

或在小提琴上:http://fiddle.re/5gb3a – anubhava

相關問題