我想在字符串中的每个单词前加一个+,除非单词以*开头。
以下是我在每个单词前面加上+的方法:
$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