2013-07-10 16 views
0

我有字符串格式如下:用PHP解析字符串刪除speicifc字符

ABC 318 XY2388

OR

ABC 318 XY02388

,我希望他們成爲「ABC 318/XY 2388「。因此,如果在第二批字母后有任何前導零,請將其刪除。

使用下面的代碼,我已經成功地得到輸出爲

ABC 318/XY 2388

ABC 318/XY 02388 (錯!)

$input = "ABC 318 XY2388"; 
$output = preg_replace("/([A-Z]*) (\d*) ([A-Z]*)(\d*)/","$1 $2/$3 $4", $input); 
echo $output; 

誰能請建議一種方法,我可以修剪0(零)在那裏?

所以,如果我通過如下:

ABC 318 XY2388

OR

ABC 318 XY02388

最終輸出應該是 ABC 318/XY 2388

+0

0是否允許在任何地方或任何地方開始? – exussum

+0

在開始之後的任何地方都可以使用0 – Sahil

回答

2

*意味着「重複0或更多次「,所以你讓每一個比賽都是可選的。你的正則表達式甚至會匹配字符串[SPACE][SPACE]A[SPACE][SPACE]A等。

正則表達式/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/會更好。

這裏的一個demo,和屍檢:

  • ([A-Z]+) - AZ之間的字母匹配捕獲組重複1次或更多次(這就是+裝置)
  • [SPACE] - 甲字面空間字符
  • ([0-9]+) - 一個匹配0到9之間的數字的捕獲組重複1個或多個ti MES
  • [SPACE] - 甲字面空格字符
  • ([A-Z]+) - 同爲第一個。匹配A-Z的捕獲組重複1次或更多次。
  • 0? - 字面0字符重複0或1次(所以它是可選的)。
  • ([0-9]+) - 數字匹配0 9之間及捕獲組重複1次或多次

PHP Demo

PHP代碼:

<?php 
    $input = "ABC 318 XY2388"; 
    $output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/", "$1 $2/$3 $4", $input); 
    var_dump($output); //string(15) "ABC 318/XY 2388" 

    $input = "ABC 318 XY02388"; 
    $output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/", "$1 $2/$3 $4", $input); 
    var_dump($output); //Same as above, as 0 is optional: string(15) "ABC 318/XY 2388" 
?> 
0

只需添加一個簡單的建議:如果你需要的是修剪一個或多箇中間人0,也許你可以這樣做:

$input = "ABC 318 XY0002388"; 
$output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)(0*)([0-9]+)/", "$1 $2/$3 $5", $input); 
var_dump($output); //should be "ABC 318/XY 2388" 

請注意,我將4美元的「中間0」節省下來,但4美元不是產出的一部分。

我還沒有測試過它,但它應該可以工作,也許如果你沒有用「(0 *)」括起來,它可以與「$ 1 $ 2/$ 3 $ 4」一起工作而不需要保存0。

我希望這會有所幫助。