0

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

给定字符串: [video url:http:\ddf.sd.com asd:fgfggh] 然后一些文本出现在此处,然后再次出现 [video url: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:

在此之后还有更多文字。

4

3 回答 3

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;
于 2013-04-11T16:42:32.443 回答
1

假设网址中没有方括号,您可以使用

'/\[video[^\]]*\]/'

您的原始正则表达式不起作用,因为.*它将贪婪地匹配所有字符,直到最终的].

于 2013-04-11T16:44:14.057 回答
1

问题是你的模式是贪婪的,.*它可以匹配所有的东西。您需要将匹配更改为

\[video[^\]]++]

即一个左括号后跟任意数量的不是右括号的项目后跟一个右括号。

所以代码看起来像

$op = reg_replace('/\[video[^\]]++]/','',$text);

这种模式也是所有格(++),这将大大减少正则表达式引擎中的回溯并加快速度。

于 2013-04-11T16:47:37.030 回答