替换所有的"foo"之间 () [英] replace all "foo" between ()

查看:65
本文介绍了替换所有的"foo"之间 ()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的正则表达式代码有问题,问题是:我想替换所有"foo"值,但只替换()"内部.示例:

I've problem with my regex code, the problem is: I want to replace all "foo" values but only inside "()". Example:

try foo foo-foo (try foo inside , foo foo foofoo)

我想用"boo"替换括号之间的所有"foo"字符串.

I want to replace all "foo" strings between the parentheses by "boo".

推荐答案

假定括号是有效的",则可以替换所有foo,后跟),而在中间没有(.

Assuming parentheses are "valid", you can replace all foos that are followed by ), without a ( in between:

$str = preg_replace('/foo(?=[^()]*\))/', 'bar', $str);

工作示例: http://ideone.com/xezU7

另一个假设没有嵌套对的选项是匹配"(...)"令牌并使用回调,但是可能使用了过多的力:

Another option, also assuming no nested pairs, is to match "(...)" tokens and use a callback, but it may be use of excessive force:

回调方法:

function replace_foo($matches) {
   return str_replace('foo', 'bar', $matches[0]);
}

使用:

$str = preg_replace_callback("/\([^()]*\)/","replace_foo", $str);

工作示例: http://ideone.com/ZzBem

这篇关于替换所有的"foo"之间 ()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆