PHP:替换所有“foo” “style=”()“”之间的字符串使用正则表达式
可能的重复:
替换 () 之间的所有“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 正常替换它。
我希望找到答案:),谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
适用于您的字符串,可能需要进行一些修改才能在所有情况下工作......
Works on your string, might need modifying a bit to work in all circumstances...
一个有效的正则表达式是:
但是由于您将有多个匹配项(0 表示整体,1 表示括号中的值),因此您必须使用 preg_replace_callback
A working regex is:
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
使用以下正则表达式:
说明:
style=
" 匹配相同的内容.*?
匹配任何字符,但不匹配以贪婪的方式,尽可能少地\(
匹配 ((.*?)
匹配任何字符在样式和括号之间,这意味着这是您应该替换的信息\)"
匹配 )"您可以使用 THIS构建正则表达式字符串的工具非常有用,它有一些示例,它会告诉您哪个部分与哪个字符串匹配。
Use the following regex:
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.
这可能是
PREG_REPLACE_EVAL
的一个很好的用途 (e修饰符):输出
This is probably a good use of
PREG_REPLACE_EVAL
(e modifier):OUTPUT