帮助 preg_replace
我想替换由标签
start_ticker 结束的 html 文本 代码.... end_ticker
我没有成功
我的代码是
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
i want to replace html text that closed by tag
start_ticker
code....
end_ticker
i don't success
my code is
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
即使不使用正则表达式也可以解决该问题:
You can solve that problem even without using regular expressions:
默认情况下 ”。” 不匹配换行符 - 您可以添加“s”(DOTALL)修饰符来更改它。
我怀疑那是你的问题。
By default "." doesn't match newlines - you can add the "s" (DOTALL) modifier to change this.
I suspect that's your problem.
我猜你想保留开始/结束标签。 然后你需要用括号捕获它们:
但要注意,正则表达式对于 html 来说并不是最佳选择。
I guess you want to keep the start/end tags. Then you need to capture them with brackets:
Beware though, that regular expressions are not the best choice when it comes to html.
您需要:
请注意 (.*?) 会产生很大的差异,因为它使匹配变得不贪婪。 此时模式将与该模式的最大数量的可能排列相匹配,而不是最少的排列。
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#贪婪
否则,如果有多个匹配项,您将从第一个匹配到最后一个,从而破坏中间的任何内容。
You need:
Note that (.*?) makes a large difference since it makes the match ungreedy. This is when the pattern will be matched to the largest number of possible permutations of that pattern, rather then the least.
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy
Otherwise, you would match from the first to the last clobbering anything in between if there are multiple matches.