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

2022-03-22 00:00:00 regex php preg-replace

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

主题:

%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])*)。并且[^%]和之后的(...|...|...)由于贪婪而阻止了其中的%22匹配。请参阅http://en.wikipedia.org/wiki/Regular_expression#Lazy_quantification。

我在一个匹配块注释(/* */)Java CC示例中找到了这种技术,但我找不到任何其他网页来解释它,所以这里有一个更简洁的示例:匹配介于12345之间而中间没有12345的文本块:

相关文章