繁体   English   中英

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

[英]Remove white space from the start of every new line of a string

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

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

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

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

请参阅正则表达式演示

详情

  • ^\\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;

输出:

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

您可以添加进一步的语句来去除尾随空格。

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

一般来说,你需要正则表达式,如:

"/\s+\s/"

有了这个,您可以检测多个空格并仅替换为一个空格。

这在换行后检测空格:

"/\n\s+/"

这在新行之前检测空格:

"/\s+\n/"

双新行:

"\n+"

你可以很好地结合它来删除你不需要的东西。

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

我建议这样做:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM