我试图在字符串中的每个非字母数字字符之前和之后插入空格,例如用户将输入的字符串(好+坏)*nice,我想让它看起来像(好+坏)*好。我想这样做的原因是因为我想把它们放在看起来像这样的数组中;
$arr[0] = "(";
$arr[1] = "good”;
$arr[2] = "+”;
$arr[3] = "bad";
$arr[4] = ")";
$arr[5] = "*";
$arr[6] = "+";
我试图在字符串中的每个非字母数字字符之前和之后插入空格,例如用户将输入的字符串(好+坏)*nice,我想让它看起来像(好+坏)*好。我想这样做的原因是因为我想把它们放在看起来像这样的数组中;
$arr[0] = "(";
$arr[1] = "good”;
$arr[2] = "+”;
$arr[3] = "bad";
$arr[4] = ")";
$arr[5] = "*";
$arr[6] = "+";
您可以使用preg_split
一行来完成此操作。
$result = preg_split('/(\w+|\W)/', '(good+bad)*nice', -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
结果:
array(
0 => "("
1 => "good"
2 => "+"
3 => "bad"
4 => ")"
5 => "*"
6 => "nice"
}
尚未对此进行测试,但您也许可以使用正则表达式来完成此操作。
s/\W/$1 /g
我相信您可以使用 preg_replace 来实现这一点。例如:
$string = "(good+bad)";
echo preg_replace('/\W+/', ' $0 ', $string);
这类似于 PHP - 迭代字符串字符
基本上使用str_split和/或preg_Split
取自 preg_split 页面(稍作修改:
<?php
$str = "(alpah+beta)*ga/6";
$keywords = preg_split("/[\/\(\)\*\&\^\%\$\#\@\!\_\{\}\:\"\+\\\]/", "$str");
print_r($keywords);
// now we replace the keywords with itself + a space on the left and right.
$count = count($keywords);
for ($i = 0; $i < $count; $i++) {
if ( $keywords[$i] == '') {
unset($keywords[$i]);
}
}
var_dump($keywords);
foreach ($keywords as &$key) {
$str = preg_replace("/$key/", " $key ", "$str");
}
echo "Finally: $str";
?>
这只是一个可以完成这项工作的快速模型。(删除生产代码的转储/打印)