在使用php进行编码时,我是一个完全的初学者,这是我第一次发布到stackoverflow。我的代码遇到了一些问题。我正在尝试在字符串中搜索一个数字,后跟一个空格,后跟另一个数字,并用不可破坏的空格替换该空格。我知道我需要使用正则表达式,但我仍然无法弄明白。任何帮助将不胜感激。我的代码是:
echo replaceSpace("hello world ! 1 234");
function replaceSpace( $text ){
$brokenspace = array(" !", " ?", " ;", " :", " …", "« ", " »", "( ", " )");
$fixedspace = array(" !", " ?", " ;", " :", " »", " …", "« ", "( ", " )");
return str_replace( $brokenspace , $fixedspace, $text );
}
我希望我的输出为:
你好世界(nbsp)! 1(NBSP)234
答案 0 :(得分:3)
下面:
<?php
$str = 'Some string has 30 characters and 1 line.';
$withNbsp = preg_replace('/([0-9]+)\s(\w)/', '$1 $2', $str);
echo $withNbsp; // Some string has 30 characters and 1 line.
?>
关键是正则表达式:/([0-9]+)\s(\w)/
答案 1 :(得分:1)
你可以试试这个:
$result = preg_replace('~(?<=[0-9]) (?=[0-9])| (?=[!?:;…»)])|(?<=[«(]) ~i', ' ', $yourString);
答案 2 :(得分:1)
您可以在此处了解如何执行此操作。
您可以继续使用str_replace()
方法,并结合preg_replace()
调用,在数字后跟空格和其他数字之间插入一个非中断空格。
echo _replace('hello world ! 1 234');
function _replace($text) {
$map = array(' !' => ' !', ' ?' => ' ?',
' ;' => ' ;', ' :' => ' :',
' …' => ' …', ' »' => ' »',
' )' => ' )', '( ' => '( ',
'« ' => '« '
);
$text = str_replace(array_keys($map), array_values($map), $text);
return preg_replace('/(?<![^0-9]) (?=[0-9])/', ' ', $text);
}
您可以使用更便宜的strtr
来翻译字符并替换您的子字符串。除此之外,您还可以使用关联数组来提高可读性,并在函数内使用preg_replace()
。
echo _replace('hello world ! 1 234');
function _replace($text) {
$text = strtr($text,
array(' !' => ' !', ' ?' => ' ?',
' ;' => ' ;', ' :' => ' :',
' …' => ' …', ' »' => ' »',
' )' => ' )', '( ' => '( ',
'« ' => '« '));
return preg_replace('/(?<![^0-9]) (?=[0-9])/', ' ', $text);
}
您可以使用单个preg_replace()
调用和组合正则表达式替换以上所有内容。
$s = preg_replace('/ (?=[!?;:…»)])|(?<![^0-9]) (?=[0-9])|(?<![^«(]) /', ' ', $s);