Html 使用正则表达式搜索包含“的字符串”;http://quot;并且不包含“;mysite.com“;

Html 使用正则表达式搜索包含“的字符串”;http://quot;并且不包含“;mysite.com“;,html,regex,parsing,dreamweaver,Html,Regex,Parsing,Dreamweaver,我如何编写正则表达式来搜索包含“http://”而不包含“mysite.com”的字符串?尝试类似于/http:\/\/(?!mysite.com)/(perl风格,也可以在javascript中使用)尝试类似于/http:\/\(?!mysite.com)/(perl风格,也可以在javascript中使用)警告 试图将正则表达式绑定到布尔逻辑中是一项吃力不讨好的工作,而布尔逻辑最好是用适当的编程语言完成的。虽然可以使用复杂的lookahead编写/PAT1/而不是/PAT2/,这样它就只是一

我如何编写正则表达式来搜索包含“http://”而不包含“mysite.com”的字符串?

尝试类似于
/http:\/\/(?!mysite.com)/
(perl风格,也可以在javascript中使用)

尝试类似于
/http:\/\(?!mysite.com)/
(perl风格,也可以在javascript中使用)

警告
试图将正则表达式绑定到布尔逻辑中是一项吃力不讨好的工作,而布尔逻辑最好是用适当的编程语言完成的。虽然可以使用复杂的lookahead编写
/PAT1/而不是/PAT2/
,这样它就只是一种模式,但这是一项痛苦的任务你不需要这样做

您应该首先解释一下您真正在做什么——在文本编辑器中执行某种匹配操作。你没有。因此,你会得到一个普遍的答案,这将是一个挑战,以适应您的本地化情况

快速回答
(?sx)#让点穿过换行符,启用注释和空格
(?=.*http://)#http的先行断言://
(?!*mysite\.com)#mysite.com的先行否定
使用Perl语法,您可以将(预)编译的模式粘贴到一个变量中,以便将来使用:

我的$is\u有效\u rx=qr{
(?=.*http://)#http的先行断言://
(?!*mysite\.com)#mysite.com的先行否定
}sx;#/s表示跨换行符,/x表示注释和空格
#后来…
如果($some_string=~$is_valid_rx){
#您的字符串有http之类的内容,但缺少mysite之类的内容
}
然而,如果你的目标是拉出所有这些链接,那对你没有帮助,因为那些lookahead不会告诉你链接在字符串中的什么位置

在这种情况下,编写一些东西来提取链接,然后过滤掉不需要的案例就容易多了,使用两个单独的正则表达式,而不是试图让所有事情都完成

@all_links=($some_string=~m{https?://\S+}xg);
@好链接=grep/mysite\.com/,@all_链接;
请注意,不会试图只匹配包含有效URL字符的链接,也不会像在纯文本中经常出现的那样出现意外的尾随标点符号

现在,为了一个真正的答案 还要注意的是,如果您正在用这种方法解析HTML,上面概述的方法只是一种快速、肮脏、快速、松散的链接提取。构建出现大量误报的有效输入很容易,构建产生误报的输入也不难

与此相反,这里是一个完整的程序,它转储了URL参数中的所有
链接地址,并且实际上这样做是正确的,因为它使用了真正的解析器

#/usr/bin/env perl
#
#fetchlinks-从列出的URL参数中获取所有和链接
#汤姆克里斯汀森
#2012年3月14日星期三08:03:53
#
严格使用;
使用警告;
使用LWP::UserAgent;
使用HTML::LinkExtor;
使用URI::URL;
die“用法:$0 url…\n”,除非@ARGV;
对于我的$arg(@ARGV){
我的@links=获取想要的链接($arg=>qw);
我的$link(@links){
如果@ARGV>1,则打印“$arg=>”;
打印“$link\n”;
}
}
出口
需要子获取链接{
我的($url,@通缉)=@;
我的%想要;
@通缉犯{@wanted}=(1)x@wanted;
my$agent=LWP::UserAgent->new;
#设置一个回调以收集所需种类的链接
我的@hits=();
#制作解析器。不幸的是,我们还不知道它的基础
#(可能与$url不同)
my$parser=new HTML::LinkExtor sub{
我的($tag,%attr)=@;
如果%wanted而不是$wanted{$tag},则返回;
按@点击次数,值为%attr;
};
#请求文档并在文档到达时对其进行解析
我的$response=$agent->request(
HTTP::Request->new(GET=>$url),
sub{$parser->parse($\u0])},
);
#将所有图像URL展开为绝对URL
my$base=$response->base;
@hits=map{$\=url($$$base)->abs}@hits;
返回@hits;
}
如果您在这样的URL上运行它,它将对所有锚定链接和图像链接进行说明:

$perl获取链接http://www.perl.org/
http://www.perl.org/
http://st.pimg.net/perlweb/images/camel_head.v25e738a.png
http://www.perl.org/
http://www.perl.org/learn.html
http://www.perl.org/docs.html
http://www.perl.org/cpan.html
http://www.perl.org/community.html
http://www.perl.org/contribute.html
http://www.perl.org/about.html
http://www.perl.org/get.html
http://www.perl.org/get.html
http://www.perl.org/get.html
http://www.perl.org/about.html
http://www.perl.org/learn.html
http://st.pimg.net/perlweb/images/icons/learn.v0e1f83c.png
http://www.perl.org/learn.html
http://www.perl.org/community.html
http://st.pimg.net/perlweb/images/icons/community.v03bf8ce.png
http://www.perl.org/community.html
http://www.perl.org/docs.html
http://st.pimg.net/perlweb/images/icons/docs.v2622a01.png
http://www.perl.org/docs.html
http://www.perl.org/contribute.html
http://st.pimg.net/perlweb/images/icons/cog.v08b9acc.png
http://www.perl.org/contribute.html
http://www.perl.org/dev.html
http://www.perl.org/contribute.html
http://www.perl.org/cpan.html
http://st.pimg.net/perlweb/images/icons/cpan.vdc5be93.png
http://www.perl.org/cpan.html
http://www.perl.org/events.html
http://st.pimg.net/perlweb/images/icons/cal.v705acef.png
http://www.perl.org/events.html
http://www.perl6.org/
http://st.pimg.net/perlweb/images/icons/perl6.v8ff6c63.png
http://www.perl6.org/
http://www.perl.org/dev.html
http://www.perlfoundation.org/
http://st.pimg.net/perlweb/images/icons/onion.vee5cb98.png
http://www.perlfoundation.org/
http://www.cpan.org/
http://search.cpan.org/~jtang/Net-Stomp-0.45/
http://search.cpan.org/~vaxman/Array-APX-0.3/
http://search.cpan.org/~salva/Net-SFTP-Foreign-1.71/
http://search.cpan.org/~gra