微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用正则表达式删除URL的一部分?

如何解决如何使用正则表达式删除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 举报,一经查实,本站将立刻删除。