我正在使用的环境是PCRE,它支持Perl语法。
我想构建一个支持所有字符和特殊字符的正则表达式。
我试过了
(.*)
但它不起作用。
例如。我正在尝试重定向
这
https://oldaddress.com/select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8
要
https://newsite.com/select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8
旧网站oldaddress.com
已成功重定向至newsite.com
,但URI部分select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8
未保留在其中。
我使用regEx =~ (^.*)
来处理URI部分,但正则表达式不支持所有特殊字符。
我想在Perl中实现这个regEx。
答案 0 :(得分:3)
你的问题几乎肯定不是你的正则表达式。查询参数不会发生变化,因此它们不应该包含在正则表达式中,因为此Perl代码将演示:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
my $url = 'https://oldaddress.com/select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8';
my $new_url = 'https://newsite.com/select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8';
$url =~ s/oldaddress/newsite/;
if ($url eq $new_url) {
say "Looks like that worked";
} else {
say "Looks like you've got a problem";
}
我只更改域名,因此我需要在正则表达式中引用。
如果您的查询字符串没有在转换中幸存,那么该问题可归结为您正在使用的技术中的其他一些问题。如果不了解您正在做的事情,我们真的无法提供更多帮助。
更新:来自Sawyer的评论
但如何处理特殊字符?,%使用Perl使用Rege
你好像在看人们告诉你的事情。
你的正则表达式不需要处理?,%或其他特殊字符。您的正则表达式只需要处理正在更改的字符串中的位 - 这是域名,并且它们不包含这些字符。
%
在Perl正则表达式中没有特殊含义。
?
具有特殊含义,您可以通过反斜杠来避免它(因此请使用\?
)。
Perl正则表达式中的点(.
)匹配除了换行符之外的任何字符。它与?
和%
匹配,没有任何问题。
你的问题不在于你的正则表达式;它是你系统中的其他地方。但是因为你对你正在做的事以及你是如何做到这一点如此神秘,我们真的无法提供帮助。
Update2 :这是我的程序的另一个版本,演示(.*)
匹配?
和%
。但我不能强调你不需要这样做。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
my $url = 'https://oldaddress.com/select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8';
my $new_url = 'https://newsite.com/select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8';
$url =~ s/(.*)oldaddress(.)/${1}newsite${2}/;
if ($url eq $new_url) {
say "Looks like that worked";
} else {
say "Looks like you've got a problem";
}