2

鉴于以下输入 -

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

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

"went to and didn't see".

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

干杯

4

4 回答 4

4

试试这个:

$output = trim(preg_replace("/(^|\s+)(\S(\s+|$))+/", " ", $input));
  • (^|\s+)表示“字符串或空格的开头”
  • (\s+|$)表示“空格字符串的结尾”
  • \S是单个非空格字符
于 2012-06-25T11:46:14.707 回答
0

试试这个正则表达式

'\s+\S\s+' -> ' '
于 2012-06-25T11:44:54.450 回答
0

你需要两张通行证

首先是去掉所有单个字符

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

第二个是只留下一个空格

[ ]{2,} replace with single space

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

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

$result = preg_replace('/(?<=^| ).(?=$| )/sm', '', $subject);
于 2012-06-25T11:47:10.490 回答
0

在和的帮助下implode尝试 explodearray_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)
于 2012-06-25T11:52:06.727 回答