Php Regex从字符串中删除所有单个字符

Php Regex从字符串中删除所有单个字符,php,regex,Php,Regex,我需要一个正则表达式来删除字符串中的所有单个字符,而不仅仅是单个字母或数字 字符串为: “未来的英国《金融时报》赌场空手道排练(麦德龙制作)” 结果应该是: “未来金融时报赌场空手道斩麦德龙” 我现在使用的表达式(在PHP中)正确地删除了单个“A”,但保留了单个“(“and”) 这是我正在使用的代码: $string = preg_replace('/\b\w\b\s?/', '', $string); 试试这个: (^| ).( |$) 细分: 1. (^| ) ->

我需要一个正则表达式来删除字符串中的所有单个字符,而不仅仅是单个字母或数字

字符串为:

“未来的英国《金融时报》赌场空手道排练(麦德龙制作)”

结果应该是:

“未来金融时报赌场空手道斩麦德龙”

我现在使用的表达式(在PHP中)正确地删除了单个“A”,但保留了单个“(“and”)

这是我正在使用的代码:

$string = preg_replace('/\b\w\b\s?/', '', $string); 
试试这个:

(^| ).( |$)
细分:

   1.  (^| )  ->  Beginning of line or space  
   2.  .      ->  Any character  
   3.  ( |$)  ->  Space or End of line
实际代码:

$string = preg_replace('/(^| ).( |$)/', '$1', $string); 
注意:我不熟悉PHP正则表达式的工作原理,因此根据实际正则表达式的声明方式,代码可能需要稍微调整

正如m.buettner所指出的,这段代码后面会有一个空格。需要修剪一下才能把它清理干净

编辑:Arnis Juraga指出,这不会清除多个单个字符
a b c
会过滤到
b
。如果这是一个问题,请使用此正则表达式:

(^| ).(( ).)*( |$)
添加到中间的
(())*
将查找任何字符后面的空格0次或更多次。缺点是这样会导致一系列单个字符所在的位置出现双空格

意思是:

The a b c dog
将变成这样:

The  dog
在执行替换以获取单个字符后,需要使用以下正则表达式来定位双空格,然后替换为单个空格

( ){2}

一个不需要捕获的稍微高效的版本是使用lookarounds。由于多重负逻辑,它的直观性稍差:

$string = preg_replace('/(?<!\S).(?!\S)\s*/', '', $input);

$string=preg_replace('/(?)
字符串末尾将留下一个尾随空格(因为它位于字符前面)。这可以通过修剪字符串来轻松解决。

@Daedalus感谢您在我的问题中的评论。没有完全理解问题-答案已撤回。@AyeshK则不会删除
,他说任何字符,特别是不只是任何字母或数字。@user1810833只需在替换参数中放入
$1$2
$1
,就可以很容易地解决这个问题。@Nick+1,回答很好,也很简单。不过,您可能应该提到警告,如果最后一个字符是sing,这将留下一个尾随空格le字符。这不会删除连续的单个字符,例如:“a b c”将转换为“b”以解释:
\b
仅在匹配的
\w
和匹配的
\w
之间匹配。因为
match
\W
,它们之间没有界限。评论只能编辑5分钟(点击此框即可删除)。非常感谢您的快速回复和解释。总之,
$string=preg_replace('/(^ |))。(|$)/','$1',$string);
非常适合我的需要