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

标签 regex url quote

我现在已经搜索了很多,但我找不到任何适合我的情况的建议。我见过消极前瞻或环视的成功,但我真的不明白。

我希望使用 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.comwww.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/

相关文章:

python - re.finditer() 为开始和结束方法返回相同的值

jquery - 使用 Jquery 在 A 元素中设置类的 URL 路径

ios - 让 UITextField 更改 Webview URL

magento - 将产品添加到购物车后如何获取报价商品 ID?

PHP regex - 计算单词前后感叹号的数量

javascript - JavaScript .replace 函数可以具有两个搜索值吗?

ruby - 以编程方式从字符串派生正则表达式

css - 使用 STATIC_URL 标签加载 CSS 样式表

c# - 如何在 C# 中维护字符串中引用的多个引号

java - 获取字符串中引号后的第一个单词“(Java)