从字符串的每个新行的开头删除空格

时间:2017-08-30 08:53:04

标签: php regex string str-replace

我有一个以下列格式输入的字符串(注意每个单词之间和每行开头的空格的随机数):

 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行开头的空格

6 个答案:

答案 0 :(得分:5)

您可以使用单个正则表达式替换来实现您的需求:

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

请参阅regex demo

<强>详情

  • ^\h+ - 一行开头的任何一个或多个水平空格(^m修饰符而与行开头匹配)
  • | - 或
  • \h+$ - 一行末尾的任意一个或多个水平空格($m修饰符而匹配行尾)
  • | - 或
  • (\R){2,} - 将最后一个捕获到第1组
  • 的2个或更多换行符序列
  • | - 或
  • (\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 :(得分:2)

您可能只需添加一个语句来摆脱尾随空格。

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

答案 2 :(得分:1)

通常你需要正则表达式:

"/\s+\s/"

通过这种方式,您可以检测到多个空格并仅替换为一个空格。

检测新行后的空格:

"/\n\s+/"

检测新行之前的空格:

"/\s+\n/"

双重新行:

"\n+"

你可以很好地结合这个去除你不需要的东西。

毕竟正则表达式只需使用trim()来清理代码。

答案 3 :(得分:0)

我会建议:

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

它用一个换行符(\R)替换任何一个空格序列,包括至少一个换行符(\n),并修剪结果。

答案 4 :(得分:-1)

使用trim(' Your string ')它将删除字符串前后的所有空格。

答案 5 :(得分:-1)

要从$myString中的每一行的开头快速删除仅空格

$myString = preg_replace( "/^ +/m", '', $myString );