正则表达式包括除特定单词之外的所有字符

时间:2013-04-11 16:39:05

标签: php regex

我想使用正则表达式过滤掉某个模式。

给定字符串: [视频网址: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:

以及此后的更多文字。

3 个答案:

答案 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);

这种模式也具有占有性(++),这将极大地减少正则表达式引擎中的回溯并加快速度。