2017-04-23 11 views
1

をしてください、私はPHPを使用していますが、このような文字列を分割しようとしています:すべての-(マイナス)と+(プラス)記号の間3x^3 - 4x^2 + 2x - 3 + 5x^5 - 2x^7 。私はexplode()を使用しようとしましたが、これは1つの条件しか受け入れられません(-または+、両方ではありません)。スプリットアップの二つの条件を文字列:「+」と「 - 」や看板

私はpreg_split()機能を見ていると、最初の条件のための正規表現として"/+|-/"を使用して試してみましたが、+は、文字「+」として扱われていないので、それは動作しませんが、正規表現のための演算子として。適切な正規表現を使用して-+の間で文字列を分割するにはどうすればよいですか?

更新:Sahil Gulati、ご返信ありがとうございます。投稿した正規表現は完全に機能しました。しかし、symcbeanのコメントを読んだ後、私はまた、その兆候を保つ必要があることを知った。どうすればこれを達成できますか?

+1

'〜[+ - ]〜' < - 上に分割するのは簡単ですが、その正規表現 – zerkms

+1

を使用式を解析する目的がある場合は、 '+'と ' - 'の間にかなりの違いがあり、分割演算*は文字を削除します。さらに、算術式を解析しようとしている場合は、+と - で文字列を分割する前に優先順位を処理する方法を検討する必要があります。あなたが解決しようとしている根本的な問題について説明したなら、私たちはより良いアドバイスをすることができます。 – symcbean

答えて

1

あなたはここでは、両方の正規表現ここでは、この/\+|\-/または/[\+\-]/ のいずれかを使用することができ、この\+を使用して+文字をエスケープする必要がありますが、あなたの質問の更新を読んだ後+-

<?php 

ini_set('display_errors', 1); 
$string='3x^3 - 4x^2 + 2x - 3 + 5x^5 - 2x^7'; 
$segments=preg_split("/\+|\-/", $string); 
print_r($segments); 
+0

'/ [+ - ] /'はエスケープせずに十分です。 '/ \ + | - /'と同じです – zerkms

+0

私は通常、これらの文字を安全な側でエスケープしますが、suggession @zerkmsに感謝します:) –

+0

@CDuck私のコードがあなたを助けますように.. –

0

のいずれかを意味し、それはあなたができることが表示されます各空きスペースのexplode()に戻ります。ここで

はワンライナーです:

$string='3x^3 - 4x^2 + 2x - 3 + 5x^5 - 2x^7'; 
var_export(explode(' ',$string)); 

出力:

array (
    0 => '3x^3', 
    1 => '-', 
    2 => '4x^2', 
    3 => '+', 
    4 => '2x', 
    5 => '-', 
    6 => '3', 
    7 => '+', 
    8 => '5x^5', 
    9 => '-', 
    10 => '2x^7' 
)