2011-02-28 49 views
-1

如何仅以大写字母,数字,特殊字符或以第一个字母大写,但不超过3个字符并带有preg_replace的单词保留字母。PHP preg_replace()只留下大写字母

例如:

Portocjnk Karaer HDS-C 7/11,9/15,15分之8-E =>HDS-C 7/11,9/15,8/15- è

的Karcher的Karcher乙元件140r BP =>乙元件140r BP

的Karcher的Karcher乙元件140r BSP TRR =>乙元件140r BSP TRR

Tatata Tatat堆场-曼YM 84 MW 31AY97KV643 =>YM 84 MW 31AY97KV643

(Tatata)(Tatat)Yard-Man YM 84 MW 31AY97KV643 =>YM 84 MW 31AY97KV643

在此先感谢。

+0

你怎么知道'Karcher B'中的'B'是“必须保留”的一部分,而不仅仅是某人的初始? – 2011-02-28 01:48:19

+0

如果没有后面跟着小写字母,我想。 – DreifGenov 2011-02-28 01:50:30

+0

我认为这是一个足够复杂的问题,您应该自己解析它,而不是将它用于'preg_' *函数。如果你最终这样做,你需要'preg_match_all',而不是'preg_replace'。 'preg_replace'采用给定的正则表达式并删除匹配的内容。你开始与你想要的匹配。因此你应该使用匹配而不是替换。 – 2011-02-28 01:53:13

回答

1
preg_replace('|\b([A-Z][a-z][a-z][a-z][a-z\-]*)\b|','',$text); 

这个人会用大部分的例子

+0

谢谢!它对我进行了一些调整。 – DreifGenov 2011-02-28 06:41:37

0

的工作,这将是一个简单的白名单的做法。而不是preg_replacing这将首先提取所需的部分。之后,$ result数组需要被重新组合。

preg_match_all('#\b[A-Z\d][A-Z\d/,-]*\b|\b(?<!-)[A-Z][a-z]{1,2}\b#', $str, $result); 
$result = implode(" ", $result[0]); 

您可能需要添加一些的“特”字在第二[...]字符类。

检查出https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world为一些很好的工具,可能有助于设计正则表达式。

+0

谢谢!这样做,但它会消除“从字符串”Tralala kulala“MTD”E740 F => MTD E740 F',但它应该是“Tralala kulala”MTD“E740 F =>”MTD“E740 F”。 – DreifGenov 2011-02-28 06:55:38

相关问题