[英]Remove white space from the start of every new line of a string
我有一个采用以下格式的字符串(注意每个单词之间和每行开头的随机空格数):
1 . BritishAirways 15FEB LONDON HONGKONG2 . 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.