preg_replace不替换某些匹配的字符串

时间:2015-06-07 09:57:37

标签: php regex preg-replace

我想在字符串中的每个单词前加一个+,除非单词以*开头。

以下是我在每个单词前面加上+的方法:

$string = "    *these are my words   ";
$trimmed = trim($string);
$pattern = '/ /';
$string2 = preg_replace ($pattern, ' +',$trimmed);

如果该单词有*,我如何避免preg_replace在每个单词前放一个+?

由于

1 个答案:

答案 0 :(得分:1)

您可以尝试以下基于负面lookbehind的正则表达式。

preg_replace('~(?<!\S)([^*\s])~', '+\1', $str);
  • (?<!\S)匹配每个单词开头存在的所有边界。这里的单词表示一个或多个非空格字符。

  • ([^*\s])匹配匹配边界旁边的单个字符,该字符不能是空格字符或*符号。

  • 现在它将匹配的字符替换为+以及第一个捕获组中存在的字符。

DEMO

preg_replace('~(^|\s)([^*\s])~', '\1+\2', $str);

DEMO