我现在已经搜索了很多,但我找不到任何适合我的情况的建议。我见过消极前瞻或环视的成功,但我真的不明白。
我希望使用 RegExp 来查找文本 block 中的 URL,但在引用时忽略它们。虽然还不完美,但我有以下方法来查找 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})*[^"]*$)((https?:\/\/)?(\w+\.)+\w{2,}(:[0-9]+)?((\/\w+)+(\.\w+)?)?\/?)
第一部分从 (? 到 *$) 是什么让它对我有用。我在java Regex - split but ignore text inside quotes?中找到了这个答案通过 https://stackoverflow.com/users/548225/anubhava
虽然我之前读过这个问题,但我忽略了他的答案,因为它不是“解决”问题的答案。我刚刚将单引号更改为双引号,这对我来说很有效。
关于regex - 使用 RegExp 选择 URL,但在用双引号引起来时忽略它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18103343/