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

主题:

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

期望的输出:
+"first set" +"second set" -drupal -wordpress

我希望我能提供更多帮助,因为我通常喜欢至少发布到目前为止的解决方案,但在这个问题上我不知所措。

任何帮助表示赞赏。谢谢你。

最佳答案

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

说明: $1 是一个反向引用,它引用正则表达式中的第一个 () -section,在本例中为 ((?:[^%]|%[^2]|%2[^2])*) 。并且 [^%](...|...|...) 之后的交替阻止了中间的 %22 由于贪婪而被匹配。见 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/

关于php - 使用 preg_replace 替换 php 中出现的所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4643442/

10-12 21:47