给出以下输入 -
"I went to 1 ' and didn't see p"
, 什么是PHP的preg_replace函数的正则表达式删除所有单个字符(并留空空格),以便输出 -
"went to and didn't see".
我一直在寻找解决方案,但找不到一个。类似的例子没有包括正则表达式的解释,所以我无法使它们适应我的问题。所以,如果你知道如何做到这一点,请提供正则表达式,但也要将其分解,以便我能理解它是如何工作的。
干杯
答案 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)
$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)