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

dtw*_*woo 2 php regex string str-replace

我有一个采用以下格式的字符串(请注意,每个单词之间和每一行开头之间的随机数都是空格):

1。英国航空15FEB伦敦香港

    2。国泰航空01MAR HONGKONG SHANGHAI

  3。澳洲航空12MAR澳大利亚悉尼

我希望输出是

1。英国航空15FEB伦敦香港
2。国泰航空01MAR HONGKONG SHANGHAI
3。澳洲航空12MAR澳大利亚悉尼   

我有以下代码

$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.
Run Code Online (Sandbox Code Playgroud)

但这给出了以下内容,这几乎是正确的,但是在第2行和第3行的开头是空白

1。英国航空15FEB伦敦香港
  2。国泰航空01MAR HONGKONG SHANGHAI
 3。澳洲航空12MAR澳大利亚悉尼   

任何人都知道如何在第2行和第3行的开头删除空白

Wik*_*żew 5

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

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

参见regex演示

细节

  • ^\h+-行首处的任何1个或多个水平空白(^由于m修饰符,匹配行首)
  • | - 要么
  • \h+$-行尾的任何1个或多个水平空格($由于m修饰符,与行尾匹配)
  • | - 要么
  • (\R){2,} -2个或更多的换行序列将最后一个捕获到组1中
  • | - 要么
  • (\s){2,} -2个或更多空格将最后一个空格捕获到第2组中

替换是对组1和2的替换反向引用。

参见PHP演示

$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;
Run Code Online (Sandbox Code Playgroud)

输出:

1 . BritishAirways 15FEB LONDON HONGKONG
2 . CathayPacific 01MAR HONGKONG SHANGHAI
3 . Qantas 12MAR SINGAPORE SYDNEY
Run Code Online (Sandbox Code Playgroud)