Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配字符串中除任何位置的字符外的所有字符_Regex_Perl - Fatal编程技术网

Regex 匹配字符串中除任何位置的字符外的所有字符

Regex 匹配字符串中除任何位置的字符外的所有字符,regex,perl,Regex,Perl,如何匹配(最好是在perl中)除一个字符外与查询字符串匹配的所有字符串 查询:tlaqlldk 要匹配:xLAQLLLDK,TxAQLLLDK,tlxqlldk等 其中“x”是任何大写字母“[A-Z]”。使用交替运算符 ^(?:[A-Z]LAQLLLDK|T[A-Z]AQLLLDK|TL[A-Z]QLLLDK|.....)$ 同样,填写所有..使用交替运算符 ^(?:[A-Z]LAQLLLDK|T[A-Z]AQLLLDK|TL[A-Z]QLLLDK|.....)$ 同样地,填充所有..您可以

如何匹配(最好是在perl中)除一个字符外与查询字符串匹配的所有字符串

查询:
tlaqlldk

要匹配:
xLAQLLLDK
TxAQLLLDK
tlxqlldk


其中“x”是任何大写字母“[A-Z]”。

使用交替运算符

^(?:[A-Z]LAQLLLDK|T[A-Z]AQLLLDK|TL[A-Z]QLLLDK|.....)$

同样,填写所有..

使用交替运算符

^(?:[A-Z]LAQLLLDK|T[A-Z]AQLLLDK|TL[A-Z]QLLLDK|.....)$

同样地,填充所有..

您可以通过编写一个糟糕的正则表达式来实现这一点,该正则表达式的构建速度非常慢,执行速度甚至更慢,或者您也可以不使用正则表达式来实现这一点,只需编写一个函数,将两个字符串逐个字符进行比较,就可以避免一个“错误”只有在只有一个错误的情况下才返回True。

您可以通过编写一个糟糕的正则表达式来实现这一点,它的构建速度非常慢,执行速度也非常慢,或者您可以不使用正则表达式来实现这一点,而只编写一个函数来逐个字符地比较两个字符串,允许出现一个“错误”仅当只有一个错误时才返回True

如何匹配(最好是在perl中)除一个字符外与查询字符串匹配的所有字符串

通过在运行时动态生成所需的正则表达式,扩展@Avinash的答案:

my$query='tlaqlldk';
my$re_proto='('.join('|',map{(my$x=$query)=~s/^(.{$\u})。/$1\[A-Za-z]/;$x;}(0..length($query)-1));
我的$re=qr/^$re_原型$/;
my@input=qw(xLAQLLLDK txaqlldk tlxqlldk);
my@matches=grep{/$re/}@input;
打印“@matches\n”;
(我还必须包括
[a-z]
,因为您的示例输入使用
x
作为标记。)

如果您需要经常这样做,我建议您缓存生成的正则表达式

如何匹配(最好是在perl中)除一个字符外与查询字符串匹配的所有字符串

通过在运行时动态生成所需的正则表达式,扩展@Avinash的答案:

my$query='tlaqlldk';
my$re_proto='('.join('|',map{(my$x=$query)=~s/^(.{$\u})。/$1\[A-Za-z]/;$x;}(0..length($query)-1));
我的$re=qr/^$re_原型$/;
my@input=qw(xLAQLLLDK txaqlldk tlxqlldk);
my@matches=grep{/$re/}@input;
打印“@matches\n”;
(我还必须包括
[a-z]
,因为您的示例输入使用
x
作为标记。)


如果您经常需要这样做,我建议您缓存生成的正则表达式。

这就是您想要的吗

#!/usr/bin/perl

  use strict;

  my @str = ("ULAQLLLDK","TAAQLLLDK","TLCQLLLDK","TLAQLLLDK");
  while(<@str>){

  if (/[A-S,U-Z]LAQLLLDK|T[A-K,M-Z]AQLLLDK|TL[B-Z]QLLLDK/ ){
  print "$_\n";
  }

 }

这就是你要找的吗

#!/usr/bin/perl

  use strict;

  my @str = ("ULAQLLLDK","TAAQLLLDK","TLCQLLLDK","TLAQLLLDK");
  while(<@str>){

  if (/[A-S,U-Z]LAQLLLDK|T[A-K,M-Z]AQLLLDK|TL[B-Z]QLLLDK/ ){
  print "$_\n";
  }

 }

只有9 x 25=225个这样的字符串,因此您可以将它们全部生成,并将它们放入哈希中进行比较

use strict;
use warnings;
use 5.010;

my %matches;

my $s = 'TLAQLLLDK';

for my $i (0 .. length($s) - 1) {
  my $c = substr $s, $i, 1;
  for my $cc ('A' .. 'Z') {
    substr(my $ss = $s, $i, 1) = $cc;
    ++$matches{$ss} unless $cc eq $c;
  }
}


printf "%d matches found\n", scalar keys %matches;

for ( qw/ TLAQLLLDK TLAQLXLDK / ) {
  printf "\$matches{%s} = %s\n", $_, $matches{$_} // 'undef';
}
输出

225 matches found
$matches{TLAQLLLDK} = undef
$matches{TLAQLXLDK} = 1

只有9 x 25=225个这样的字符串,因此您可以将它们全部生成,并将它们放入哈希中进行比较

use strict;
use warnings;
use 5.010;

my %matches;

my $s = 'TLAQLLLDK';

for my $i (0 .. length($s) - 1) {
  my $c = substr $s, $i, 1;
  for my $cc ('A' .. 'Z') {
    substr(my $ss = $s, $i, 1) = $cc;
    ++$matches{$ss} unless $cc eq $c;
  }
}


printf "%d matches found\n", scalar keys %matches;

for ( qw/ TLAQLLLDK TLAQLXLDK / ) {
  printf "\$matches{%s} = %s\n", $_, $matches{$_} // 'undef';
}
输出

225 matches found
$matches{TLAQLLLDK} = undef
$matches{TLAQLXLDK} = 1

这可以在Python
regex
包(必须从pypy安装)中完成。这可以在Python
regex
包(必须从pypypy安装)中完成。这可以在Python
regex
包(必须从pypypy安装)中完成。仅当前三个字符中的任意两个与查询字符串匹配时,才会打印此脚本“tlaqlldk”仅当前三个字符中的任意两个与查询字符串“tlaqlldk”匹配时,此脚本才会打印。仅当前三个字符中的任意两个与查询字符串“tlaqlldk”匹配时,此脚本才会打印