我现在已经搜索了很多,但是在我的情况下我无法得到任何建议。我看到了成功的负面前瞻或外观,但我真的不明白。
我希望使用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视频。
答案 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包含所有字母和数字,因此在使用时应小心。