用于允许所有特殊字符的Perl正则表达式
我正在使用的环境是支持Perl语法的PCRE 我想构建一个支持所有字符和特殊字符的正则表达式 我试过了用于允许所有特殊字符的Perl正则表达式,perl,pcre,Perl,Pcre,我正在使用的环境是支持Perl语法的PCRE 我想构建一个支持所有字符和特殊字符的正则表达式 我试过了 (.*) 但它不起作用 比如说。我正试图改变方向 从 到 旧站点olddress.com成功重定向到newsite.com,但URI部分select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8不在其中 我使用了regEx=~(^.*)来处理URI部分,但regEx不支持所有特殊字符 我想用Perl实现这个正则表达式。您的问题几乎
(.*)
但它不起作用
比如说。我正试图改变方向
从
到
旧站点olddress.com
成功重定向到newsite.com
,但URI部分select.do?cyuf=err%3Errt.com%3fsfds%4A222-3424234&p=66&j=8
不在其中
我使用了regEx=~(^.*)
来处理URI部分,但regEx不支持所有特殊字符
我想用Perl实现这个正则表达式。您的问题几乎肯定不是正则表达式的问题。查询参数不会更改,因此它们根本不应该包含在正则表达式中,因为这段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
你似乎没有读到人们告诉你的东西
%
在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(.)/${1}newsite${2}/;
if ($url eq $new_url) {
say "Looks like that worked";
} else {
say "Looks like you've got a problem";
}
添加一些例子,描述什么“但它不起作用”。意思是你不清楚你想做什么。你在用什么编程语言?是否要替换部分
https://oldaddress.com/select
与新闻站点
?为什么$
和%
相关<代码>$甚至不在您显示为输入的URL中。无法回答。给我们看一些代码,我也许可以。但实际上,我怀疑如果你这样做,我们会发现一个完全不同的问题。在Perl正则表达式中,点匹配除换行符以外的所有字符。那么,是的,它匹配吗?如果这是真的,那么您的PCRE并不像它声称的那样兼容Perl。但是,正如我在下面的回答中耐心地解释的那样,您不需要匹配输入字符串中未更改的部分。感谢Cross提供的示例,但是如何处理特殊字符?,%使用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";
}
#!/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";
}