哪些字符可以用作正则表达式分隔符



哪些字符可以用作Perl正则表达式的分隔符?m/re/, m(re)måreå似乎都有效,但我想知道所有的可能性

From perlop:

对于m,可以使用任意一对非空白字符作为分隔符。

什么都可以,除了空格。完整的段落是:

如果"/"是分隔符,则初始m是可选的。使用m可以使用任意一对非空白字符作为分隔符。这对于匹配包含"/"的路径名特别有用,以避免LTS(倾斜牙签综合征)。如果"?"是分隔符,那么?PATTERN?适用。如果"'"是分隔符,则不会对PATTERN执行插值。当在标识符中使用有效字符时,m.

后面需要有空格。

通常情况下,我想知道"我可以写一个Perl程序来回答这个问题吗?"

下面是尝试所有可打印的ASCII字符的一个很好的近似:

#!/usr/bin/perl
use warnings;
use strict;
$_ = 'foo bar'; # something to match against
foreach my $ascii (32 .. 126) {
    my $delim = chr $ascii;
    next if $delim eq '?'; # avoid fatal error
    foreach my $m ('m', 'm ') {  # with and without space after "m"
        my $code = $m . $delim . '(w+)' . $delim . ';';
#        print "$coden";
        my $match;
        {
            no warnings 'syntax';
            ($match) = eval $code;
        }
        print "[$delim] didn't compile with $m$delim$delimn" if $@;
        if (defined $match and $match ne 'foo') {
            print "[$delim] didn't match correctly ($match)n";
        }
    }
}

目前词法分析器中有一个错误,有时会阻止将UTF-8字符用作分隔符,即使您可以在未完全使用Unicode模式时将Latin1隐藏。

几乎任何非空白字符都可以使用,但是标识符字符必须用空白与初始m分隔开。虽然当您使用单引号作为分隔符时,它会禁用插值和大多数反斜杠转义。

最新更新