-1

我试图在字符串中的每个非字母数字字符之前和之后插入空格,例如用户将输入的字符串(好+坏)*nice,我想让它看起来像(好+坏)*好。我想这样做的原因是因为我想把它们放在看起来像这样的数组中;

  $arr[0] = "(";
  $arr[1] = "good”;
  $arr[2] = "+”;
  $arr[3] = "bad";
  $arr[4] = ")";
  $arr[5] = "*";
  $arr[6] = "+";
4

4 回答 4

0

您可以使用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"
}
于 2014-09-15T23:43:59.407 回答
-1

尚未对此进行测试,但您也许可以使用正则表达式来完成此操作。

s/\W/$1 /g
于 2014-09-15T23:28:46.780 回答
-1

我相信您可以使用 preg_replace 来实现这一点。例如:

$string = "(good+bad)";
echo preg_replace('/\W+/', ' $0 ', $string);
于 2014-09-15T23:31:44.550 回答
-1

这类似于 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";
?>

这只是一个可以完成这项工作的快速模型。(删除生产代码的转储/打印)

于 2014-09-16T01:09:30.490 回答