2017-08-30 64 views
0

我有一個以下列格式進來的字符串(請注意每個字之間和每行開始處的空格的隨機數):從字符串的每一個新行的起始處刪除空格

 1 . BritishAirways 15FEB LONDON HONGKONG

    2 . CathayPacific 01MAR HONGKONG SHANGHAI

  3 . Qantas 12MAR SINGAPORE SYDNEY

我所要的輸出是

1 . BritishAirways 15FEB LONDON HONGKONG 
2 . CathayPacific 01MAR HONGKONG SHANGHAI 
3 . Qantas 12MAR SINGAPORE SYDNEY

我有下面的代碼

$flightinfo = preg_replace('/\h+/', ' ', $flightinfo); 
$flightinfo = trim($flightinfo); 

$flightinfo = str_replace("\r\n\r\n","\r\n",$flightinfo);/* checks and removes double line breaks if they're there. 

然而,這給人的下方,這是近正確但它是在線路2的開始和3個白色空間

1 . BritishAirways 15FEB LONDON HONGKONG 
    2 . CathayPacific 01MAR HONGKONG SHANGHAI 
3 . Qantas 12MAR SINGAPORE SYDNEY

任何人都知道我可以在行的開頭移除空白2和3

回答

0

使用trim(' Your string ')它將刪除字符串之前和之後的所有空格。

+0

這不會刪除換行符和空格等_in_字符串,這是OP所要求的。 –

0

你可能只是添加一個進一步的語句來擺脫尾隨的空白。

$flightinfo = preg_replace('/^\s+/m', '', $flightinfo); 
3

你可以使用一個單一的正則表達式替換實現你需要的東西:

$flightinfo = preg_replace('~^\h+|\h+$|(\R){2,}|(\s){2,}~m', '$1$2', $flightinfo); 

regex demo

詳細

  • ^\h+ - 在一個行的開始的任何1個或更多個水平空白字符(^行開頭匹配由於m改性劑)
  • | - 或
  • \h+$ - 在行末尾的任何一個或多個水平空格($與由m修飾符引起的行結尾匹配)
  • | - 或
  • (\R){2,} - 2以上換行符序列捕獲的最後一個成組1
  • | - 或
  • (\s){2,} - 2以上空格捕獲最後一個到第2組

替換是對組1和2的替換反向引用。

PHP demo

$re = '/^\h+|\h+$|(\R){2,}|(\s){2,}/m'; 
$flightinfo = ' 1 . BritishAirways 15FEB LONDON HONGKONG 


    2 . CathayPacific 01MAR  HONGKONG SHANGHAI 



    3 . Qantas 12MAR SINGAPORE SYDNEY'; 
$flightinfo = preg_replace($re, '$1$2', $flightinfo); 
echo $flightinfo; 

輸出:

1 . BritishAirways 15FEB LONDON HONGKONG 
2 . CathayPacific 01MAR HONGKONG SHANGHAI 
3 . Qantas 12MAR SINGAPORE SYDNEY 
1

Generaly你需要的正則表達式,如:

"/\s+\s/" 

有了這個,你發現多空間,只能用一個空格替換。

該檢測空白後的新行:

"/\s+\n/" 

雙新行:

"\n+" 

而且可以很好地結合這

"/\n\s+/" 

此之前,新的生產線檢測空白刪除你不需要的東西。

畢竟正則表達式只是使用trim()來清除代碼。

0

我建議這樣的:

$flightinfo = trim(preg_replace("~\s*\R\s*~", "\n", $flightinfo)); 

它取代的白色空間的任何序列,包括至少一個換行(\R),與單個換行(\n),並修整結果。