您好,
我尝试使用正则表达式替换foo
之间的()
之间的所有style=" and "
字符串
以下是一个例子:
blah blah foo blah style="foo text blah (foo and blah foo)"
应该替换为:
blah blah foo blah style="foo text blah (bar and blah bar)"
我尝试使用此代码,但它不起作用。
do {
$code = preg_replace('/(style\=\"[^)]*)left(?=[^()]*\))([^)]*\")/U', '\1tempvalue\3', $code, -1, $count);
} while($count != 0);
然后我尝试使用foreach来获得结果,然后使用preg_replace正常替换它。
我希望找到答案:),谢谢。
答案 0 :(得分:1)
适用于你的字符串,可能需要修改一下才能在所有情况下工作......
echo preg_replace_callback('/style="(.*)(\(.+\))"/',create_function(
'$matches',
'return "style=\"" . $matches[1] . preg_replace("/foo/","bar",$matches[2]) . "\"";'
),'blah blah foo blah style="foo text blah (foo and blah foo)"');
答案 1 :(得分:0)
使用以下正则表达式:
/style=".*?\((.*?)\)"/
说明:
style=
“匹配相同的内容.*?
匹配任何字符,但不是以贪婪的方式匹配,尽可能最少\(
匹配((.*?)
匹配样式和括号之间的任何字符,这意味着这是您应该替换的信息\)"
匹配)“您可以使用THIS工具构建正则表达式字符串。它真的很有用,它有一些例子,它会告诉你哪个部分匹配哪个字符串。
答案 2 :(得分:0)
答案 3 :(得分:0)
这可能是对PREG_REPLACE_EVAL
(e modifier):
$str = 'blah blah foo blah style="foo text blah (foo and fooblah foo)" foo';
echo preg_replace('~(style="[^(]*)(\([^)]*\))~ie', "str_replace('\\\\\', '', '$1') . preg_replace('#\bfoo\b#i', 'bar', '$2')", $str) ."\n";
blah blah foo blah style="foo text blah (bar and fooblah bar)" foo