PHP:替换所有“;foo”;字符串介于“;style=';()'";使用regex


PHP : replace all "foo" string between "style='()'" using regex

可能重复:
替换所有“foo";介于()之间

你好,

我尝试使用regex来替换()style=" and " 之间的所有foo字符串

这里有一个例子:

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正常替换它。

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

适用于您的字符串,可能需要修改一点才能在所有情况下工作。。。

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)"');

一个有效的正则表达式是:

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

但是,由于您将有多个匹配项(0表示整体,1表示括号中的值),因此必须使用preg_replace_callback

使用以下正则表达式:

/style=".*?'((.*?)')"/

说明:

  • style="匹配相同的内容
  • .*?匹配任何字符,但不要以贪婪的方式,尽可能少地匹配
  • '(匹配(
  • (.*?)匹配样式和括号之间的任何字符,这意味着这是您应该替换的信息
  • ')"匹配)"

您可以使用THIS工具来构建正则表达式字符串。它真的很有帮助,它有一些例子,它会告诉你哪个部分匹配哪个字符串。

这可能是PREG_REPLACE_EVAL(e修饰符)的一个很好的用法:

$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