正则表达式删除少于3个字符的“字符组”

时间:2013-11-06 01:53:11

标签: php regex

我正在尝试删除少于3个字符的任何“字符组”。

这是来源:

  

1.29取消部分计划C / 5879 2030.在i i.r e9g6Pop Iatian Area ProcH 22.4.93 Suburban Lands n f 53dv 3 N014 3.5.98。计划或任何来自M R.5I B.L.1laY98 E35的01 53。 P0 RT I 0 N S在Maroubrajuncti p / I .z。 .0 / .L。我。 .I

重复介于1和3之间的单词字符的设置范围,例如/ b \ w {1,3} \ b /不起作用,因为“C / 5879”将变为“5879”。

所需的输出如下:

  

1.29取消部分计划C / 5879 2030. e9g6Pop Iatian Area ProcH 22.4.93 Suburban Lands 53dv N014 3.5.98。计划来自R.5I B.L.1laY98 E35。 Maroubrajuncti

另一种可行的方法是通过加入由空格分隔的2个或更少字符的“字符组”来创建更大的“字符组”。

例如:

  

1.29取消部分计划C / 5879 2030. inii.r e9g6Pop Iatian Area ProcH 22.4.93 Suburban Lands nf 53dv 3N014 3.5.98。从MR5I B.L.1laY98 E35的0153计划orany。 P0RTI0NS AtMaroubrajuncti p / I.z。 0.0 / .L.I..I

我愿意接受任何解决方案,以便从Regex Hell拯救我。

1 个答案:

答案 0 :(得分:0)

你对“单词”的定义是“空格分隔”,这与正则表达式对“单词到非单词”的定义不同,所以请使用环顾四周:

\s+\S{1,3}(?=\s)

请注意,表达式包含(捕获)前导空格,因此删除匹配项不会在结果中留下双重空格。

在regextester上测试结果是:

  

1.29取消部分计划C / 5879 2030. e9g6Pop Iatian Area ProcH 22.4.93 Suburban Lands 53dv N014 3.5.98。计划来自R.5I B.L.1laY98 E35。 Maroubrajuncti。我