0

次のような内容のファイルがあります:

Apple 100

バナナ200

Cat 300

ファイル内の特定の文字列を検索して、次の単語を取得したいと思います。例:猫を検索すると300になります。この解決策を調べました:Strpos()を使用して針の後に次の文字列を見つける方法ですが、それは役に立たず、期待した出力が得られませんでした。正規表現を使用せずに方法を提案していただければ幸いです。

4

4 に答える 4

1

これが最善のアプローチかどうかはわかりませんが、提供されたデータがあれば機能します。

  1. fopen()を使用してファイルの内容を取得します
  2. explode()を使用して値を配列要素に分割します
  3. 配列を反復処理し、各要素のインデックスが奇数または偶数であることを確認します。新しいアレイにコピーします。

完璧ではありませんが、正しい方向に進んでいます。

<?php
$filename = 'data.txt'; // Let's assume this is the file you mentioned
$handle = fopen($filename, 'r');
$contents = fread($handle, filesize($filename));
$clean = trim(preg_replace('/\s+/', ' ', $contents));
$flat_elems = explode(' ', $clean);

$ii = count($flat_elems);
for ($i = 0; $i < $ii; $i++) {
    if ($i%2<1) $multi[$flat_elems[$i]] = $flat_elems[$i+1];
}

print_r($multi);

これにより、次のような多次元配列が出力されます。

Array
(
    [Apple] => 100
    [banana] => 200
    [Cat] => 300
)
于 2013-02-20T10:50:58.487 に答える
0

これを試してください。正規表現は使用されませんが、検索する文字列が長い場合は非効率になります。

function get_next_word($string, $preceding_word)
{
  // Turns the string into an array by splitting on spaces
  $words_as_array = explode(' ', $string); 

  // Search the array of words for the word before the word we want to return
  if (($position = array_search($preceding_word, $words_as_array)) !== FALSE)
    return $words_as_array[$position + 1]; // Returns the next word
  else
    return false; // Could not find word
}
于 2013-02-20T10:35:08.400 に答える
0
$find = 'Apple';
preg_match_all('/' . $find . '\s(\d+)/', $content, $matches);
print_r($matches);
于 2013-02-20T10:37:11.303 に答える
0

名前付き正規表現サブパターンを使用して、探している情報をキャプチャすることでメリットが得られる場合があります。

たとえば、前者の単語の数を見つける(1<=値<=9999)

/*String to search*/
$str = "cat 300";
/*String to find*/
$find = "cat";
/*Search for value*/
preg_match("/^$find+\s*+(?P<value>[0-9]{1,4})$/", $str, $r);
/*Print results*/
print_r($r);

一致するものが見つかった場合、結果の配列には、「値」としてインデックス付けされた、探している数値が含まれます。

このアプローチは、

file_get_contents($file);    
于 2013-02-20T10:49:52.717 に答える