我有一个以下列格式输入的字符串(注意每个单词之间和每行开头的空格的随机数):
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行开头的空格
答案 0 :(得分:5)
您可以使用单个正则表达式替换来实现您的需求:
$flightinfo = preg_replace('~^\h+|\h+$|(\R){2,}|(\s){2,}~m', '$1$2', $flightinfo);
请参阅regex demo。
<强>详情
^\h+
- 一行开头的任何一个或多个水平空格(^
因m
修饰符而与行开头匹配)|
- 或\h+$
- 一行末尾的任意一个或多个水平空格($
因m
修饰符而匹配行尾)|
- 或(\R){2,}
- 将最后一个捕获到第1组|
- 或(\s){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 );