编程语言
首页 > 编程语言> > 使用preg_replace替换php中的所有匹配项

使用preg_replace替换php中的所有匹配项

作者:互联网

正则表达式绝对是我的弱点,这一点让我完全难过.我正在构建一个相当基本的搜索功能,并且需要能够根据以下模式更改用户输入:

学科:

%22first set%22 %22second set%22-drupal -wordpress

所需的输出:

+"first set" +"second set" -drupal -wordpress

我希望我能得到更多的帮助,因为我通常希望至少发布到目前为止的解决方案,但是对此我感到茫然.

任何帮助表示赞赏.谢谢.

解决方法:

preg_replace('/%22((?:[^%]|%[^2]|%2[^2])*)%22/', '+"$1"', $str);

说明:$1是一个反向引用,它引用正则表达式中的第一个()部分,在这种情况下,是((?:[^%] |%[^ 2] |%2 [^ 2])*).并且[^%]及其后的交替字符(… | … | …)可以防止由于贪婪而导致“之间的匹配.请参阅http://en.wikipedia.org/wiki/Regular_expression#Lazy_quantification.

我在匹配块注释(/ * * /)的JavaCC示例中找到了该技术,但找不到其他任何解释该问题的网页,因此这里有一个更干净的示例:在12345 12345之间匹配文本块… ….. 12345之间没有12345:/ 12345([^ 1] | 1 [^ 2] | 12 [^ 3] | 123 [^ 4] | 1234 [^ 5])* 12345 /

标签:preg-replace,php,regex
来源: https://codeday.me/bug/20191105/1995815.html