我有像+a +string +of +words +with +different +lengths
我想使用php的 preg_replace 来删除长度为1到3个字符的单词,包括+。
所需输出为a +string of +words +with +different +lengths
答案 0 :(得分:0)
不捕捉群组,
(?<= |^)\+(?=\w{1,3}\b)
你的最终PHP代码是,
<?php
$string = '+a +string +of +words +with +different +lengths';
$pattern = "~(?<= |^)\+(?=\w{1,3}\b)~";
$replacement = "";
echo preg_replace($pattern, $replacement, $string);
?>
<强>输出:强>
a +string of +words +with +different +lengths
<强>解释强>
(?<= |^)\+(?=\w{1,3}\b)
(?<= |^)
只有在起点或空格之后才能看到正面的后视镜。\+
文字+符号(?=\w{1,3}\b)
+
符号后面的字符必须是(1到3)个字符,后面再跟一个边界字符。答案 1 :(得分:0)
仅从包含+
的1到3个字符的单词中删除+
使用捕获组尝试以下正则表达式并替换为$1
\+(\b\w{1,2}\b)
以下是regex101
上的演示说明
\b assert position at a word boundary
\w{1,2} match any word character [a-zA-Z0-9_] between 1 and 2 times
模式查找+符号后跟1和2个字符的长字。
注意:如果您只查找字母,请使用[a-z]
代替\w
。
示例代码:
$re = "/\+(\b\w{1,2}\b)/";
$str = "+a +ab +string +of +words +with +different +lengths";
$subst = '$1';
$result = preg_replace($re, $subst, $str);
输出:
a ab +string of +words +with +different +lengths
答案 2 :(得分:0)
使用此:
$replaced = preg_replace('~\+(?=\w{1,2}\b)~', '', $yourstring);
<强>解释强>
\+
匹配文字+
(?=\w{1,2}\b)
断言后面是一个或两个单词字符,然后是单词边界 {1,2}
是因为您希望最多定位3个字符串,包括+