Вопрос
У меня есть длинная строка, которая может одновременно удерживать все эти значения:
hello<!>how are you? <!>I am fine<!> What is up? <!> Nothing!
Мне нужно найти все эти позиции:
' <!> '
' <!>'
'<!> '
'<!>'
И заменить их " n"
Можно ли достичь с помощью str_replace в PHP?
Решение
Если у вас есть только эти 4 возможности, да, то вы можете сделать это с str_replace
.
$str = str_replace( array( ' <!> ', ' <!>', '<!> ', '<!>' ), "\n", $str );
Да, но что, если есть два места? Или вкладка? Вы добавляете космический корпус для каждого?
Вы можете либо добавить специальные случаи для каждого из них, либо использовать регулярные выражения:
$str = preg_replace( '/\s*<!>\s*/', "\n", $str );
Другие советы
Конечно, вы можете достичь этого с 4 звонками str_replace
. Редактировать: Я был неправ. Вы можете использовать массивы в str_replace
.
$str = str_replace(' <!> ', "\n", $str);
$str = str_replace(' <!>', "\n", $str);
$str = str_replace('<!> ', "\n", $str);
$str = str_replace('<!>', "\n", $str);
Также рассмотрите возможность использования strtr
, это позволяет сделать это за один шаг.
$str = strtr($str, array(
' <!> ' => "\n",
' <!>' => "\n",
'<!> ' => "\n",
'<!>' => "\n"
));
Или вы можете использовать регулярное выражение
$str = preg_replace('/ ?<!> ?/', "\n", $str);
Вы, безусловно, можете сделать это с Str_replace, как это:
$needles = array(" <!> ","<!> "," <!>","<!>");
$result = str_replace($needles,"\n",$text);
Ты не можешь сделать это с str_replace
. Анкет Либо использовать комбинацию explode
, strip
а также implode
, или пользователь preg_replace
.
Редактировать: preg_replace('/\s*<!>\s*', PHP_EOL, $string);
должен быть лучше.
Конечно, str_replace('<!>', "\n", $string);
Если ваш пример завершен.
Вы можете использовать:
//get lines in array
$lines = explode("<!>", $string);
//remove each lines' whitesapce
for(i=0; $i<sizeof($lines); $i++){
trim($lines[$i]);
}
//put it into one string
$string = implode("\n", $lines)
Это немного утомительно, но это должно работать (также удаляет два пространства и вкладки). (не проверял код, поэтому могут быть ошибки)
Это довольно аккуратно:
$array = explode('<!>', $inputstring);
foreach($array as &$stringpart) {
$stringpart = trim($stringpart);
}
$outputstring = implode("\r\n", $array);