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

发布于 2024-11-12 17:43:43 字数 742 浏览 1 评论 0 原文

可能的重复:
替换 () 之间的所有“foo”

您好,

我尝试使用正则表达式替换所有() 之间的 >foo 字符串位于 style=" 和 " 之间,

这是一个示例:

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

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

Possible Duplicate:
replace all “foo” between ()

Hello,

I tried to use regex to replace all foo string between the () which between style=" and "

Here's an example :

blah blah foo blah style="foo text blah (foo and blah foo)"

it should be replaced to be :

blah blah foo blah style="foo text blah (bar and blah bar)"

i tried to use this code but it dont working .

do {
  $code = preg_replace('/(style\=\"[^)]*)left(?=[^()]*\))([^)]*\")/U', '\1tempvalue\3', $code, -1, $count);
} while($count != 0);

then im trying to using foreach to get the results,, then replace it normally using preg_replace .

i wish to find the answer :) ,, thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

习惯那些不曾习惯的习惯 2024-11-19 17:43:43

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

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

Works on your string, might need modifying a bit to work in all circumstances...

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)"');
风月客 2024-11-19 17:43:43

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

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

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

A working regex is:

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

But since you will have more than one matches (0 for the whole, 1 for the values in parenthesis), you will have to use preg_replace_callback

空城仅有旧梦在 2024-11-19 17:43:43

使用以下正则表达式:

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

说明:

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

您可以使用 THIS构建正则表达式字符串的工具非常有用,它有一些示例,它会告诉您哪个部分与哪个字符串匹配。

Use the following regex:

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

Explanation:

  • style=" matches the same thing
  • .*? match any character but not in a greedy way, just as minimum as possible
  • \( matches (
  • (.*?) match any character between the style and parentheses, meaning this is the information you should replace
  • \)" matches )"

You can use THIS tool to build regex strings. It's really helpful, it has some examples and it will tell you what part matches which string.

叹梦 2024-11-19 17:43:43

这可能是 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

This is probably a good use of 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";

OUTPUT

blah blah foo blah style="foo text blah (bar and fooblah bar)" foo
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文