如何在perl regexp中使用连字符匹配多个单词

时间:2014-06-17 14:45:28

标签: regex perl

我想知道如何使用perl正则表达式匹配url中用连字符分隔的多个单词(包含空格)。例如,

url = &name=abc&age=12&address=ab - cd&city=xyz;
url = &name=abc&age=12&address=abcd&city=xyz;

在给定的网址中,我想单独匹配地址字段并将其替换为空。

我正在尝试这个,但它不匹配连字符和第一个网址后面的单词,但它对第二个网址工作正常。

url =~ s/\&address=(\w+)//g;

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

正则表达式是一种不错的方法,但它有可能通过潜在地删除可能很重要的其他信息(例如片段)来破坏URL的完整性。

另一种方法是使用URI::QueryParam模块用任何内容覆盖值:

#!/usr/bin/perl

use strict;
use warnings;

use URI;
use URI::QueryParam;

my $url = 'http://www.domain.com/a/b/c?name=abc&age=12&address=ab - cd&city=xyz';
my $uri = URI->new($url);

$uri->query_param('address', '');
print "Address is now: " . $uri->query_param('address') . "\n";

答案 1 :(得分:1)

通过取消评论尝试其中之一,应该适合您,如需更多帮助,请使用您想要的所需输出进行评论。

#!/usr/bin/perl
$url = '&name=abc&age=12&address=ab - cd&city=xyz';
$url = '&name=abc&age=12&address=abcd&city=xyz';
$url =~ s/address=(.*)&//g;
#$url =~ s/address=(.*)&/$1/g;
print $url;