2016-08-16 32 views
0

長い文字列からサブ文字列を抽出する必要があります。私はPHP posstr()を使ってどのようにアプローチするのか知っています。とstrpos();しかし、データが非常に大きいと私は正規表現を使用して部分文字列を抽出することができればより効率的だと思う。例えばregexを使用してサブ文字列を抽出するPHP

、Iは、次にフォーマット小数点の後の文字は、小数点秒を表す2つの文字の前に「すべて」

"3203.79453" 

を有する数、(例えば緯度)を有する場合小数緯度を得るために、私は次のように計算する必要があります。

32 + (03.79453)/60 = 32.06324217 

だから、本質的に、私は、サブ文字列「03.79453」を抽出する正規表現の方法が必要です。

2つの質問は正規表現を使ってどのように達成するのですか?strpos()とposstr()を使う方法を使うよりも速いです。これは、両方のオプションを達成するのは簡単です

答えて

2

ありがとう:

substr($line, strpos($line, '.') - 2); 

か:パフォーマンスについては

preg_match("/(\d{2}\..*)/", $line, $matches); 

は、私はあなたがベンチマークそれに必要があるだろうと思います。 average周りに0.85秒:1,000,000マッチ

  • substrためaverage周り1.6秒:

    • preg_match:私はこれらの線のそれぞれの百万担当者を実行することにより、各例のパフォーマンスを比較する簡単なテストを行ってきました1,000,000件の一致

    この場合、substrを使用するとパフォーマンスが優れているようです。

  • +0

    パーフェクト。 Robbieありがとう。 –

    1

    あなたはそうのようなpreg_replace()を使用することができます。

    <?php 
    
         $geoCoordinate = "3203.79453"; 
         $degrees  = preg_replace("#(\d{2}\.\d*?$)#", "",   $geoCoordinate); 
         $seconds  = preg_replace("#(\d*?)(\d{2}\.\d*?)#", "$2", $geoCoordinate); 
         $degAndSecs  = round($degrees + ($seconds/60), 8); 
    
         var_dump($degAndSecs); //<== PRODUCES::: float 32.06324217 
    
    関連する問題