我有一个字符串,它是一个多行字符串,具体取决于输入格式略有不同
1. Qatar 2. Qatar 3 . Cathay 4. Qatar 2 . British 3. Qantas
我希望输出字符串具有相同格式的所有行:
1 . Qatar 2 . Qatar 3 . Cathay 4 . Qatar 2 . British 3 . Qantas
我可以使用
检查第一行$fullstop = substr("$input", 2); //isolate character 2
if (strpos($fullstop, '.') !== false) { //check is the character in pos 2 is a .
$output = str_replace("."," .",$fullstop); //replace the full stop with space fullstop
}
这适用于第一行,但我希望代码对所有代码行都这样做。
有什么想法吗?
答案 0 :(得分:0)
strtr()
可以解决问题:
代码:(Demo)
$string='
1. Qatar
2. Qatar
3 . Cathay
4. Qatar
2 . British
3. Qantas';
var_export(strtr($string,[' .'=>' .','.'=>' .']));
输出:
'
1 . Qatar
2 . Qatar
3 . Cathay
4 . Qatar
2 . British
3 . Qantas'
strtr()对于此任务来说是一个很好的函数,因为它首先替换最长的匹配,并且一旦替换了子字符串,它将不会在同一个调用中再次替换。这种行为就是space-dot
永远不会成为double-space-dot
的原因。
或preg_replace()
:
var_export(preg_replace('/\d+\K\./',' .',$string)); // digit then dot
// ^^--- restart fullstring match (no capture group needed)
var_export(preg_replace('/(?<=\d)\./',' .',$string)); // dot preceded by a digit
var_export(preg_replace('/(?<! )\./',' .',$string)); // dot not preceded by a space
或str_replace()
:
var_export(str_replace(['.',' '],[' .',' '],$string));
这会在每个点之前增加一个额外的空间,然后&#34;清理&#34;通过将任何双空格转换为单空格。
答案 1 :(得分:0)