php检查字符串的多行上的字符

时间:2017-08-30 13:40:34

标签: php string replace strpos

我有一个字符串,它是一个多行字符串,具体取决于输入格式略有不同

 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
}

这适用于第一行,但我希望代码对所有代码行都这样做。

有什么想法吗?

2 个答案:

答案 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)

您可以使用preg_replace

$output = preg_replace('/(\d+)([.\s]*)/m','$1 . ',$input);

Live demo