【问题标题】:Regex to strip specific characters正则表达式去除特定字符
【发布时间】:2012-02-05 21:30:45
【问题描述】:

我一直在使用以下正则表达式来替换字符串中的所有标点符号:

preg_replace('/[^\w\s]/', '', $tweet);

\w 是 [a-zA-Z0-9_] 的简写,\s 用于省略空格。我在这里学到了这种智慧:Strip punctuation in an address field in PHP。但是现在,我需要正则表达式来去除除

之外的所有字符
a-z and A-Z
{ and }

所以它应该去掉所有的点、逗号、数字等。什么是正确的正则表达式?

【问题讨论】:

    标签: php regex


    【解决方案1】:
    preg_replace('/[^a-zA-Z{} ]/', '', $tweet);
    

    FakeRainBrigand 在评论中提出的可能更快的变体,谢谢:

    preg_replace('/[^a-zA-Z{} ]+/', '', $tweet);
    

    【讨论】:

    • /[^a-zA-Z{}]+/ 会更好吗?这样,每个匹配替换操作都是针对一系列非法字符而不是每个字符执行的。 (性能)
    • @FakeRainBrigand:你提到这个很有趣。 :) 我在发帖时自己考虑过这一点,但手头没有硬性基准事实,因此不愿提出任何要求。无论如何,将您的变体添加到答案中,以获得更好的曝光度。
    • 谢谢大家,但这将删除所有空格。我的错 - 它没有被列为合法字符。有人可以扩展吗?
    • @Reveller:然后在字符集中添加一个空格。 (见更新的答案)
    【解决方案2】:
    preg_replace('/[^a-z{}]/i', '', $tweet);
    

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 2016-05-26
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多