0

文字列から特定の形式のすべてのインスタンスを抽出しようとしています:

私の新しいソニー[PT#123456ABC; ソニー]にはこの機能がありますが、私の友人は新しい東芝[PT#AD-3232hjk; 東芝]にはこの機能があります。

抽出したい:

[PT#123456ABC; ソニー]

[PT#AD-3232hjk; 東芝]

ここでわかるように、一貫した位置にあるアイテムは次のとおりです。

  • [PT#
  • ;
  • ]

さまざまなタイプのstrpos()を使用しようとしましたが、部品番号とメーカー名の長さと形式が異なるため、はるかに大きな文字列からそれらのインスタンスを確実に引き出すことができませんでした。私はこれを解決するために正規表現を使用するさまざまな方法を試してきましたが、それらに関する知識はかなり限られています。これらの式を抽出して変数に配置した後、式から部品番号と製造元名を分離する必要があります。これは、正規表現を使用して実行する方が簡単な場合もあります。

どんな助けでも大歓迎です。ありがとう

4

3 に答える 3

1
$matches = array();
preg_match_all( "/\[PT#([^\];]+);([^\]]+)\]/", $input, $matches,  PREG_SET_ORDER);

foreach ($matches as $match) {
  echo "id=", trim($match[1]), " brand=", trim($match[2]), "\n";
}
于 2009-05-07T23:46:58.383 に答える
0

私はこれがそれをするだろうと思います

preg_match_all( "/(\[PT#\s+.*?;\s+.*?\])/", $input, $matches );

print_r( $matches );

または、固有の情報を取得したいだけの場合

preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );
于 2009-05-07T23:29:37.163 に答える
0

これらのエントリを多数含むテキスト ファイルから読み取ることになると思います。あなたができることは次のとおりです。

preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);

すべての一致が配列 $result に入れられ、次のようにアクセスできます。

echo $result[1][0]; //echos first occurrence's serial

$result は列優先でソートされ、一致する最初のエントリは完全な一致文字列です

echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony

それが役立つことを願っています

編集:正規表現を修正しました。今は動作するはずです(まだテストされていません)

于 2009-05-07T23:38:32.040 に答える