-1

長い文字列テキストから特定の情報を抽出しようとしています。テキストは次のとおりです。

Rating: E​​xplicit Score: 17 Tags: apron blonde_hair brown_eyes itaru_chokusha kirigaya_kazuto long_hair 乳首 no_bra nopan ヌード sword_art_online yuuki_asuna User: openui

それらを次のように抽出したい

  1. レーティング: 明示的
  2. スコア: 17
  3. タグ: エプロン 金髪_髪 茶色_目 いたる_直者 桐ヶ谷和人 長髪 剣_art_online 結城明日奈
  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);

やっと使ってみ(.*)ましたが、全文表示されました。これは1つの単語のみを抽出します

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)

残りの情報を抽出する方法は? また、可能であれば配列のインデックスと値としても。

4

1 に答える 1

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]);

出力:

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
)
于 2013-08-06T18:39:26.570 に答える