2013-08-06 116 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

相关问题