PHP:使用正则表达式替换“style ='()'”之间的所有“foo”字符串

时间:2011-05-31 12:29:29

标签: php regex preg-replace

  

可能重复:
  replace all “foo” between ()

您好,

我尝试使用正则表达式替换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正常替换它。

我希望找到答案:),谢谢。

4 个答案:

答案 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)

工作正则表达式是:

style="[^(]*\(([^)]*)\)"

但是因为你将有多个匹配(整数为0,括号中的值为1),你将不得不使用preg_replace_callback

答案 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