如何解决如何使用正则表达式删除URL的一部分?
| 我该如何转:http://site.com/index.PHP?id=15
变成这个?:
http://site.com/index.PHP?id=
我使用哪些RegEx?
我已经尝试这样做了两个多小时,但是我没有运气。
我似乎无法取出最后的数字,有时
最后的字母也给我带来麻烦。
我正在使用Bing!而不是Google。
到目前为止,当我搜索某些内容时,这是我的RegEx:
$start = \'<h3><a href=\"\';
$end = \'\" onmousedown=\';
while ($result =~ m/$start(.*?)$end/g)
我可以添加些什么以最终取出字母和数字,然后将其保留为等号?
谢谢。
解决方法
由于您无法使用正则表达式正确解析[X] HTML,因此应查找可能会获得所需href的最小上下文。
据我所知,href中不能出现的一个字符是
\"
。因此
/href=\"([^\"]+)\"/
应在$1
中生成URL。在提取所需的ID字符串之前,我会理智地检查它是否具有URL完整性,然后:
s/\\?id=\\w+/id=/
但是,这全是骇客,因为您无法使用正则表达式解析HTML。因此,它可能会在您第一次向客户展示时中断。
您应该真正检查一下正确的Perl解析:http://www.google.com/webhp?q=perl+html+parser
, 您要求使用正则表达式解决方案,但您的问题有点不确定,而用于HTML的正则表达式仅适用于权宜之计/一次性应用,否则您可能只是在伤害自己。
由于我真的不满意您的实际需求和HTML源代码,这是获取URL并吐出页面上找到的所有链接而没有查询字符串的通用解决方案。出于所有合理的目的/目的,id=
等同于没有id的代码。
在Perl中有很多方法可以做到这一点,至少有三到四个是好的解决方案。这是一个经常被忽视的东西:libxml。 Docs:XML :: LibXML,URI和URI :: QueryParam(如果您希望更好的查询操作)。
use warnings;
use strict;
use URI;
use XML::LibXML;
my $source = shift || die \"Give a URL!\\n\";
my $parser = XML::LibXML->new;
$parser->recover(1);
my $doc = $parser->load_html( location => $source );
for my $anchor ( $doc->findnodes(\'//a[@href]\') )
{
my $uri = URI->new_abs( $anchor->getAttribute(\"href\"),$source );
# commented out ideas.
# next unless $uri->host eq \"TARGET HOST NAME\";
# next unless $uri->path eq \"TARGET PATH\";
# Clear the query completely; id= might as well be nothing.
$uri->query(undef);
print $uri,$/;
}
听起来您可能正在使用Bing!刮这种事情几乎与每个搜索引擎的服务条款背道而驰。不要做如果您注册并获得开发者令牌,则它们具有API(至少Google会这样做)。
, 我不确定100%正在做什么,但这是问题所在:
while ($result =~ m/$start(.*?)$end/g)
这个循环的目的是什么?您正在使用称为$result
的标量,并检查模式匹配。 $result
如何变化?
您最初的问题是如何做到这一点:
http://site.com/index.php?id=15
到这个:
http://site.com/index.php?id=
也就是说,如何从表达式中删除“ 14”(或另一个数字)。答案很简单:
$url =~ s/=\\d+$/=/;
这样会将您的正则表达式锚定在URL的末尾,而不会用任何空格替换结尾数字。
如果您要删除任何字符串,则有点复杂:
$url =~ s/=[^=]+/=/;
您不能简单地使用\\S+
,因为正则表达式通常很贪婪。因此,您要指定一系列以等号开头的非等号字符。
现在,对于while
循环,也许您想要一个if语句来代替...
if ($result =~ /$start(.*?)$end/g) {
print \"Doing something if this matched\\n\";
}
else {
print \"Doing something if there\'s no match\\n\";
}
而且,我不确定这意味着什么:
我正在使用Bing!而不是Google。
您是否要解析Bing!的输入?如果是这样,请确切说明您的实际意图。也许我们知道一种更好的方法。例如,如果您要解析搜索结果的输出,则可能有可以使用的API。
, 我该如何转:
http://site.com/index.php?id=15
变成这个?:
http://site.com/index.php?id=
我认为这是您正在寻找的解决方案
#!/usr/bin/perl
use strict;
use warnings;
my $url=\"http://site/index.php?id=15\";
$url =~ s/(?<=id=).*//g;
print $url;
输出:
http://site.com/index.php?id=
根据您的需要,URL中将省略=号后的任何内容
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。