dongxian1699 2015-02-24 10:21
浏览 18
已采纳

根据子字符串删除字符串

I want to remove substrings from a string. These substrings are always between whitespaces and contain either push or pull.

Let's say I have the following string:

col-md-4 col-sm-6 col-md-pull-6 col-sm-push-4

How would I get the following (using PHP preg_replace)?

col-md-4 col-sm-6
  • 写回答

3条回答 默认 最新

  • douou0977 2015-02-24 10:25
    关注

    You can do it like this:

    $result = preg_replace('~(?:\s*+\S*pu(?:ll|sh)\S*)+~', '', $str);
    

    pattern details:

    ~                # pattern delimiter
    (?:              # open a non capturing group
        \s*+         # zero or more whitespaces (possessive)
        \S*          # zero or more non-whitespaces
        pu(?:ll|sh)  # push or pull
        \S*
    )+               # repeat the non capturing group (1 or more)
    ~
    

    Note: if the string begins with "push" or "pull", this pattern may let a leading whitespace, in this case, use rtrim to remove it.

    Depending how looks your string, this variant that unrools the loop (?:[^p\s]+|p+(?!u(?:ll|sh)))*+ (that replaces more explicitly \S*) may be more performant:

    (?:\s*+[^p\s]*+(?:p+(?!u(?:ll|sh))[^p\s]*)*+pu(?:ll|sh)\S*)+
    

    about possessive quantifiers and lookarounds

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看