正则表达式删除字符串中三个或更少字符单词的第一个字符

时间:2014-07-04 11:58:10

标签: php regex

我有像+a +string +of +words +with +different +lengths

这样的字符串

我想使用php的 preg_replace 来删除长度为1到3个字符的单词,包括+。 所需输出为a +string of +words +with +different +lengths

3 个答案:

答案 0 :(得分:0)

不捕捉群组,

(?<= |^)\+(?=\w{1,3}\b)

DEMO

你的最终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个字符串,包括+