douhuanchi6586 2016-08-22 15:25
浏览 34
已采纳

正则表达式多次替换包围的单词

I'm trying to replace all " " in twig syntax when it's surrounded by "{%" and "%}" or "{{" and "}}".

For example in the following string :

<p>{{ myFunction()&nbsp; }}</p>    
<p>&nbsp;</p>    
<p>{{ number|number_format(2, "&nbsp;.&nbsp;", '&nbsp;,&nbsp;')&nbsp;}}</p>    
<p>{% set myVariable = '&nbsp;&nbsp;' %}</p>

I want to replace every "&nbsp;" by "" except the "<p>&nbsp;</p>" one.

I'm doing the following :

$content = preg_replace('/({[{%].*)(&nbsp;)(.*[}%]})/', '$1 $3', $content);

but it replace only one occurrence of "&nbsp" in each brackets surroundings.

How to make it for all?

  • 写回答

3条回答 默认 最新

  • dream2891 2016-08-22 20:45
    关注

    I'm trying to replace all &nbsp; in twig syntax when it's surrounded by {% and %} or {{ and }}.

    If you are seeking for the easiest solution, just match all substrings that start with {{ and end with }}, or that start with {% and end with %} with '~{{.*?}}|{%.*?%}~s' regex, and use the pattern with the preg_replace_callback where you can further manipulate the match value inside the anonymous function:

    preg_replace_callback('~{{.*?}}|{%.*?%}~s', function ($m) {
         return str_replace('&nbsp;', '', $m[0]); 
    }, $s);
    

    See the PHP demo

    Pattern details:

    • {{.*?}} - match {{, then any 0+ characters as few as possible (due to the lazy *? quantifier) up to the closest }}
    • | - or
    • {%.*?%} - match {%, then any 0+ characters as few as possible up to the closest %}
    • ~s' - enables the DOTALL modifier so that.` could also match newline symbols.
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(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 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看