我想使用正则表达式过滤掉某个模式。
给定字符串: [视频网址:http:\ ddf.sd.com asd:fgfggh]然后一些文字再次出现在这里[视频网址:http:\ ddf.sd.com asd: fgfggh]以及其后的一些文字。
必需的O / P:然后一些文字再次出现在此处,之后会有更多文字。
语言: PHP
我尝试了什么:
$text='[video url:http:\\ddf.sd.com asd:fgfggh] Then some text goes here then again [video url:http:\\ddf.sd.com asd:fgfggh] and some more text following this.';
$op = reg_replace('/\[video(.*)\]/','',$text);
echo $op
我得到的o / p:
以及此后的更多文字。
答案 0 :(得分:2)
我稍微改变了模式:
$text='[video url:http:\\ddf.sd.com asd:fgfggh] Then some text goes here then again [video url:http:\\ddf.sd.com asd:fgfggh] and some more text following this.';
$op = reg_replace('/\[video.*?\]/','',$text);
echo $op;
答案 1 :(得分:1)
假设网址中没有方括号,您可以使用
'/\[video[^\]]*\]/'
您的原始正则表达式不起作用,因为.*
会贪婪地匹配最终]
之前的所有字符。
答案 2 :(得分:1)
问题在于你的模式是贪婪的,.*
可以匹配它。您需要将匹配更改为
\[video[^\]]++]
即。一个开始括号,后跟任意数量的项目,这些项目不是一个结束括号,后跟一个右括号。
所以代码看起来像
$op = reg_replace('/\[video[^\]]++]/','',$text);
这种模式也具有占有性(++
),这将极大地减少正则表达式引擎中的回溯并加快速度。