使用RegExp选择URL,但在用双引号括起时忽略它们

时间:2013-08-07 12:26:20

标签: regex url ignore quote

我现在已经搜索了很多,但是在我的情况下我无法得到任何建议。我看到了成功的负面前瞻或外观,但我真的不明白。

我希望使用RegExp查找文本块中的URL,但在引用时忽略它们。虽然不完美但我有以下内容来查找网址:

(https?\://)?(\w+\.)+\w{2,}(:[0-9])?\/?((/?\w+)+)?(\.\w+)?

我希望它符合以下内容:

www.test.com:50/stuff
http://player.vimeo.com/video/63317960
odd.name.amazone.com/pizza

但不匹配:

"www.test.com:50/stuff
http://plAyerz.vimeo.com/video/63317960"
"odd.name.amazone.com/pizza"

由于

修改 为了澄清,我可以通过表达式传递一段完整的文本。以下我想要的示例段落:

我希望找到以下链接 www.example.com 。但是,应忽略此链接“www.example.com”“www.example.com www.example.com”也会被忽略,但这并不是必需的。

我在下面工作的另一个样本。语言是php:

$articleEntry = "Hey guys! Check out this cool video on Vimeo: player.vimeo.com/video/63317960";

$pattern = array('/\n+/', '/(https?\:\/\/)?(player\.vimeo\.com\/video\/[0-9]+)/');

$replace = array('<br/><br/>',
    '<iframe src="http://$2?color=40cc20" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'); 
    $articleEntry = preg_replace($pattern,$replace,$articleEntry);

上述结果将使用双重中断“

”替换任何新行“\ n”,并通过用iframe和链接替换Vimeo地址来嵌入Vimeo视频。

2 个答案:

答案 0 :(得分:1)

我找到了解决方案!

(?=(([^"]+"){2})*[^"]*$)((https?:\/\/)?(\w+\.)+\w{2,}(:[0-9]+)?((\/\w+)+(\.\w+)?)?\/?)

第一部分(?到* $)是什么让它对我有用。我在java Regex - split but ignore text inside quotes?

https://stackoverflow.com/users/548225/anubhava中找到了这个答案

虽然我之前已经阅读过这个问题,但我忽略了他的答案,因为它不是那个“解决”问题的答案。我只是将单引号更改为双引号,这对我有用。

答案 1 :(得分:0)

^$添加到您的正则表达式

 ^(https?\://)?(\w+\.)+\w{2,}(:[0-9])?\/?((/?\w+)+)?(\.\w+)?$

请注意您可能需要在http(意为https?\:\/\/

之后转义斜杠

更新

如果您希望区分大小写,则不应使用\w,而应使用[a-z]。 \ w包含所有字母和数字,因此在使用时应小心。