【问题标题】:PHP preg_replace() Leave only words in uppercasePHP preg_replace() 只保留大写单词
【发布时间】:2011-02-28 01:46:56
【问题描述】:

如何使用 preg_replace 仅保留大写单词、数字、特殊字符或第一个字母为大写但包含不超过 3 个字符的单词。

例如:

Portocjnk Karaer HDS-C 7/11、9/15、8/15-E => HDS-C 7/11、9/15、8/15 -E

Karcher Karcher B 140 R Bp => B 140 R Bp

Karcher Karcher B 140 R Bsp Trr => B 140 R Bsp Trr

Tatata Tatat Yard-Man YM 84 M-W 31AY97KV643 => YM 84 M-W 31AY97KV643

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

提前致谢。

【问题讨论】:

  • 如何判断“Karcher B”中的“B”是“必须保留”的一部分,而不仅仅是某人的首字母?
  • 如果后面不跟小写,我猜。
  • 我认为这是一个足够复杂的问题,您应该自己解析它,而不是把它交给preg_* 函数。如果你最终这样做了,你想要preg_match_all,而不是preg_replacepreg_replace 采用给定的正则表达式并删除匹配的内容。你从你想要匹配的开始。因此,您应该使用匹配而不是替换。
  • 您能否更具体地说明“特殊字符”的含义?
  • 昨天的回答有什么问题? stackoverflow.com/questions/5133133/…

标签: php preg-replace special-characters uppercase digit


【解决方案1】:
preg_replace('|\b([A-Z][a-z][a-z][a-z][a-z\-]*)\b|','',$text);

这个可以与你的大部分例子一起工作

【讨论】:

    【解决方案2】:

    这将是一种简单的白名单方法。而不是 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,了解一些可能有助于设计正则表达式的好工具。

    【讨论】:

    • 谢谢!这可行,但它会从字符串中删除“。Tralala kulala "MTD" E740 F =&gt; MTD E740 F,但它应该是Tralala kulala "MTD" E740 F =&gt; "MTD" E740 F
    猜你喜欢
    • 2011-03-18
    • 2021-12-04
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多