php
  • regex
  • string
  • preg-match
  • 2017-04-21 6 views -1 likes 
    -1

    は、私は、文字列があります。正規表現[ABCD] ABCD efhg(ABCD)から3つのデータ

    [18d03] Complete screen 12" (tablet) 
    

    を私は取得したい:

    preg_match('/^(.+?)\s*\(([^)]+)\)$/', $local->parts_name, $explode); 
    

    $one = '18d03'; 
    $two = 'Complete screen 12"'; 
    $three = 'tablet'; 
    

    は今、私はこれを作ります

    しかし、この正規表現は最初に表示されません18d03

    +0

    http://regexr.com/3fpvr – 12years

    答えて

    1

    これを行うにはいくつかの方法がありますが、/^\[(.+)\] (.+?) \((.+)\)$/は必要な操作を行う必要があります。 \の特別な意味を持つesape文字。

    あなたはより良いパフォーマンスを得るために、最初のドットマッチングパターンが `[\(+)。](` \の怠惰でなければなりませんhttp://regexr.com/3fq01

    +1

    でそれをプレビューすることができます - > '\ [(。+?)] '、または\ [(\ w +)]'であってもよい)。 –

    +0

    それは面白いです。遅延マッチングの使用によるパフォーマンス上の利点があることはわかりませんでした。 – StuBez

    +0

    いいえ、直接の相関はなく、コンテキストに依存します。ここで、 ']'は文字列の終わりではなく最初の '[']に近いと予想されるので、この状況では怠惰な量指定子を使うのが自然です。 –

    関連する問題