正则表达式"忽略"不是"排除"

时间:2014-03-23 08:01:32

标签: regex thunderbird

我完全迷失了。我需要一个正则表达式 可以检测下面的4个起始网址中的任意一个

 ^(.*http://.*|.*http%3A%2F%2F.*|.*https://.*|.*https%3A%2F%2F.*)$

而且.......

应该检测到: (任何标点符号或空格或退格)(大写或小写字母w的3倍)(一个点)(任何)

而且.......这很重要

应该忽略,但不能排除......以下完全字符串(或者是否存在于页面中)

 http://www.w3.org

这对我来说很复杂,因为我仍然需要将它包含在正则表达式行中 即使它被忽略了,否则,它将匹配&

中找到
    (.*http://.*|.*http%3A%2F%2F.*|.*https://.*|.*https%3A%2F%2F.*)

我的目标是找到/匹配除

之外的任何网址
    http://www.w3.org 

即使它在页面中,或者如果它不存在。 所以如果页面中只有这个:

    http://www.w3.org

&安培;没有其他网址..那么它就不应该匹配。


感谢Tyler但我的正则表达式知识几乎为零,我只能知道当我右键单击它们以选择actionslike或regexr(

所以我根据我提供给你的网址更新了我的命令: HREF%3D%22http%3A%2F%2Fwww%2Edommermuth%2D1%2Ecom &安培;它有效:

HTTPS?(:// |%3A%2F%2F)(?!www.w3.org)(。*)

但由于我缺乏知识,我不明白如何做到这一点

"您可以做的是使http部分可选,或者必须匹配http或www或两者。这种类型的正则表达式出现在我最近回答的另一个问题中 - 针对不同的URL的多个preg_replace RegEx"

我尝试添加此功能,但它不起作用: (WWW)

现在我失踪的是检测到以www

开头的网址

(任何标点符号或空格或退格键)(大写或小写字母w的3倍)(一个点)(直到到达空格或行尾的任何内容)

1 个答案:

答案 0 :(得分:2)

好的,试试这个:

/\bhttps?(://|%3A%2F%2F)(?!www\.w3\.org)(.*)\b/g

在此测试:http://regexr.com?38jp5

该测试链接使用javascript样式的正则表达式,但应该在其他地方使用。

重要的一部分是下半部分 - 一个负向前瞻,检查后面的内容确切文本www.w3.org

我压缩了你的内容:我匹配http然后选择s然后://%3A%2F%2F

我将整个事物包裹在单词边界中,您可以将其更改为引号或任何您需要的内容。全局标志可让您匹配多个项目。


关于OP的问题:

  

d%22   可以出现在http或https

之前      

这个缺失&应匹配:   HREF%3D%22http%3A%2F%2Fwww%2Edommermuth%2D1%2Ecom

如果这很重要,只需在正则表达式之前和之后删除边界\b,这样http就可以在任何地方匹配。

  

正则表达式命令应检测:(任何标点符号或空格或退格键)(大写或小写字母w的3倍)(一个点)(任何)

此正则表达式无法与http://google.com之类的链接匹配 - 查找www实际上不是检查链接的好方法。您可以做的是使http部分可选,或者必须匹配http或www或两者。这种类型的正则表达式出现在我最近回答的另一个问题中 - Multiple preg_replace RegEx for different URLs


编辑#2:

  

(任何标点符号或空格或退格键)(大写或小写字母w的3倍)(一个点)(直到到达空格或行尾的任何内容)

正如我上面提到的,你所描述的内容与http://google.com之类的网址不匹配 - 但如果这是你想要的,请使用:

(\W|^)[wW]{3}\.[^\s$]+

而不是那个,我认为你想要的是这个,这是我的第一个答案的组合,以及上面不同帖子的链接。

((https?(://|%3A%2F%2F))(www\.)|(https?(://|%3A%2F%2F))|(www\.))(?!(www\.)?w3\.org)([^</\?\s]+)[^<\s]*

您希望将此正则表达式与全局和不敏感标志一起使用