Regex 在Perl模式匹配中,将匹配的字符串打印到匹配的字符串
有没有办法只打印匹配的字符串直到匹配Regex 在Perl模式匹配中,将匹配的字符串打印到匹配的字符串,regex,perl,Regex,Perl,有没有办法只打印匹配的字符串直到匹配 use strict; use warnings; my $match_re = qr/\QCopyright (c) \E( \d .* ) \Q by Bill Shakespeare.\E/xi; my $str = 'Copyright (c) 2008,2009-2011 by Wordsworth'; if ($str =~ $match_re) { print "\ncomplete match\n"; } else { pr
use strict;
use warnings;
my $match_re = qr/\QCopyright (c) \E( \d .* ) \Q by Bill Shakespeare.\E/xi;
my $str = 'Copyright (c) 2008,2009-2011 by Wordsworth';
if ($str =~ $match_re) {
print "\ncomplete match\n";
} else {
print "\npartial match: \n";
}
在本例中,我想打印
部分匹配:版权(c)20082009-2011 by
,因为它与此匹配。假设一个以
$string ='\bibitem{bibtex_key} rest';
可以使用以下行提取这两个部分:
my ($bibtex_key, $rest) = $string =~ m/\\bibitem\{(.*)\}(.*)/;
现在,您可以轻松地根据需要对其进行调整:)假设一个标准的BibTeX处理条目(bbl),从
$string ='\bibitem{bibtex_key} rest';
可以使用以下行提取这两个部分:
my ($bibtex_key, $rest) = $string =~ m/\\bibitem\{(.*)\}(.*)/;
现在,您可以轻松地根据需要对其进行调整:)因此,如果
$str
是版权(foo)
的话,您只需要打印版权(?@ thSuxiDigiBrand),概念没有意义。ReEX引擎通常回溯很多次,因此有很多很多的部分匹配。忽略了“代码> Coprr< /COD>在您的示例中也是部分匹配的事实,考虑如果名称是<代码>科丽<代码>,而不是<代码>华兹华斯< /代码>会发生什么。这意味着Cory
中的Co
也将是部分匹配。请提供一个更好的定义,说明您想要做什么。@ikegami我想他们想要最长的公共前缀,除了前缀是正则表达式而不是固定字符串。我想在模式匹配失败的地方添加一个标记,比如^
,这样就可以很容易地找到确定不匹配的位置,例如,如果$str
拥有Bill Shaakespeare的版权(c)20082009-2011
,那么我想打印Bill Shaa^kespeare的版权(c)20082009-2011,这样很容易识别打字错误。所以如果$str
是版权(foo)
你只想打印版权(?@ thSuxiDigiBrand),概念没有意义。ReEX引擎通常回溯很多次,因此有很多很多的部分匹配。忽略了“代码> Coprr< /COD>在您的示例中也是部分匹配的事实,考虑如果名称是<代码>科丽<代码>,而不是<代码>华兹华斯< /代码>会发生什么。这意味着Cory
中的Co
也将是部分匹配。请提供一个更好的定义,说明您想要做什么。@ikegami我想他们想要最长的公共前缀,除了前缀是正则表达式而不是固定字符串。我想在模式匹配失败的地方添加一个标记,比如^
,这样就可以很容易地找到确定不匹配的位置,例如,如果$str
拥有Bill Shaakespeare的版权(c)20082009-2011
,那么我喜欢打印Bill Shaa^kespeare的版权(c)20082009-2011,这样很容易识别打字错误。