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