我正在尝试替换字符串中的一个或两个字母。请考虑此正则表达式
$str = 'I haven\'t got much time to spend!';
echo preg_replace('/\b([a-z0-9]{1,2})\b/i','',$str);
returns: haven' got much time spend!
expected output: haven't got much time spend!
我的目标是从字符串中删除任意一个或两个字符长度的单词。这可以是字母数字或特殊字符。
答案 0 :(得分:6)
使用lookarounds:
preg_replace('/(?<!\S)\S{1,2}(?!\S)/', '', $str)
当删除单词时,这会留下双重空格。要删除空格,您可以尝试以下内容:
preg_replace('/\s+\S{1,2}(?!\S)|(?<!\S)\S{1,2}\s+/', '', $str)
答案 1 :(得分:3)
只需使用:
echo preg_replace('/(?<!\S)\S{1,2}(?!\S)/i', '', 'a dljlj-b2 adl xy zq a');
输出符合要求:
dljlj-b2 adl
所以不要忘记通过否定断言来处理字符串的开头/结尾。