用于允许所有特殊字符的Perl正则表达式

用于允许所有特殊字符的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实现这个正则表达式。您的问题几乎

我正在使用的环境是支持Perl语法的PCRE

我想构建一个支持所有字符和特殊字符的正则表达式

我试过了

  (.*)
但它不起作用

比如说。我正试图改变方向

旧站点
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正则表达式中没有特殊意义

  • 有一个特殊的含义,您可以通过使用反斜杠对其进行转义来避免这种情况(因此请使用
    \?

  • Perl正则表达式中的点(
    )匹配除换行符以外的任何字符。它与
    %
    匹配,没有任何问题

  • 你的问题不在于你的正则表达式;它在你系统的其他地方。但是,因为你对自己正在做的事情和如何做的事情如此神秘,我们实在帮不了你什么忙

    更新2:这是我的程序的另一个版本,它演示了
    (.*)
    匹配
    %
    。但是我再怎么强调也不为过,你不需要这样做

    #!/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";
    }