2017-04-23 16 views
1

我正在使用PHP,並試圖拆分所有的-(減號)和+(加號)符號之間的字符串:3x^3 - 4x^2 + 2x - 3 + 5x^5 - 2x^7 。我嘗試過使用explode(),但這隻能接受一個條件(只有-+,不是兩者)。拆分串有兩個條件:「+」和「 - 」並保留標誌

我已經看了看preg_split()功能,並使用"/+|-/"作爲首要條件的正則表達式都試過了,但它不工作,因爲+不作爲字符「+」對待,而是作爲對正則表達式運算符。如何使用正確的正則表達式將-+之間的字符串分開?

更新:Sahil古拉蒂,感謝您的迴應。你發佈的正則表達式完美工作。但是,在閱讀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' 
)