如何使用preg_replace从字符串中删除单个字符单词

时间:2012-06-25 11:39:32

标签: php regex preg-replace

给出以下输入 -

"I went to 1 ' and didn't see p"

, 什么是PHP的preg_replace函数的正则表达式删除所有单个字符(并留空空格),以便输出 -

"went to and didn't see".

我一直在寻找解决方案,但找不到一个。类似的例子没有包括正则表达式的解释,所以我无法使它们适应我的问题。所以,如果你知道如何做到这一点,请提供正则表达式,但也要将其分解,以便我能理解它是如何工作的。

干杯

4 个答案:

答案 0 :(得分:2)

试试这个:

$output = trim(preg_replace("/(^|\s+)(\S(\s+|$))+/", " ", $input));
  • (^|\s+)表示“字符串或空格的开头”
  • (\s+|$)表示“空格字符串的结尾”
  • \S是单个非空格字符

答案 1 :(得分:0)

试试这个正则表达式

'\s+\S\s+' -> ' '

答案 2 :(得分:0)

你需要两次传球

首先是删除所有单个字符

(?<=^| ).(?=$| ) replace with empty string

第二个是只留下一个空格

[ ]{2,} replace with single space

您最终会得到一个在开头或结尾可能有空格的字符串。我会用你的语言来修饰它,而不是用正则表达式来修饰它

例如,第一个正则表达式是用php编写的

$result = preg_replace('/(?<=^| ).(?=$| )/sm', '', $subject);

答案 3 :(得分:0)

implodeexplodearray_filter

的帮助下尝试
$str ="I went to 1 ' and didn't see p";
$arr = explode(' ',$str);
function singleWord($var)
{
  if(1 !== strlen($var))
  return $var;
}
$final = array_filter($arr,'singleWord');

echo implode(' ',$final);
//return "went to and didn't see"(length=19)