PHPのフォーマットのすべてのインスタンスを抽出するための正規表現構文

StackOverflow https://stackoverflow.com/questions/837550

  •  10-07-2019
  •  | 
  •  

質問

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

  

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

抽出したい:

  

[PT#123456ABC;ソニー]

     

[PT#AD-3232hjk;東芝]

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

  • [PT#
  • ;
  • ]

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

ご協力をお願いします。 ありがとう

役に立ちましたか?

解決

これでうまくいくと思う

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

print_r( $matches );

別の方法として、固有の情報を取得したい場合

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

他のヒント

$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";
}

これらのエントリの多くを含むテキストファイルから読み取ることにします。できることは:

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

役立つこと

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top