Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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_Unicode - Fatal编程技术网

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

Regex 哪些字符可以用作正则表达式分隔符?,regex,perl,unicode,Regex,Perl,Unicode,哪些字符可以用作Perl正则表达式的分隔符m/re/、m(re)和måreå似乎都能工作,但我想知道所有的可能性。来自: 对于m,您可以使用任意一对非空白字符作为分隔符 所以任何东西都可以,除了空格。全文如下: 如果“/”是分隔符,则首字母m是可选的。对于m,您可以使用任意一对非空白字符作为分隔符。这对于匹配包含“/”的路径名特别有用,以避免LTS(倾斜牙签综合症)。如果“?”是分隔符,那么“模式”的“仅匹配一次”规则?应用。如果“'”是分隔符,则不会对图案执行插值。在标识符中使用有效字符时,m

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

来自:

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

所以任何东西都可以,除了空格。全文如下:

如果“/”是分隔符,则首字母m是可选的。对于m,您可以使用任意一对非空白字符作为分隔符。这对于匹配包含“/”的路径名特别有用,以避免LTS(倾斜牙签综合症)。如果“?”是分隔符,那么“模式”的“仅匹配一次”规则?应用。如果“'”是分隔符,则不会对图案执行插值。在标识符中使用有效字符时,m后面需要空格


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

目前,lexer中存在一个错误,有时会阻止UTF-8字符用作分隔符,即使如果您不是在完全Unicode模式下,您可以通过它隐藏拉丁文1。

我想知道,这种情况经常发生“我可以编写一个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 "$code\n";
        my $match;
        {
            no warnings 'syntax';
            ($match) = eval $code;
        }
        print "[$delim] didn't compile with $m$delim$delim\n" if $@;
        if (defined $match and $match ne 'foo') {
            print "[$delim] didn't match correctly ($match)\n";
        }
    }
}

谢谢,我在找perlre。那是因为它们不是正则表达式分隔符,而是运算符分隔符。正则表达式是分隔符内部发生的事情。理论和实践在这里有点冲突。有四个特殊字符成对使用:()[]{}。示例:perl-nlE'if(m){say“FOO”}“@shawnhcorey是非正则表达式特定的,而是perl特定的吗?我无法从文档中理解。谢谢。有任何特定的字符吗?
使用utf8;…;$str=~mê;
在UTF-8编码的脚本中按预期工作。@Mat,注意这是一个拉丁字符。
$str=~mشش
解析(并工作)也是,这不是拉丁语(阿拉伯语iso-8859-6)@Mat,我现在没有时间向您展示示例错误,但它们确实存在。几天前我再次遇到它们,但我现在必须运行。解决方案不错,但需要一段时间才能检查所有unicode字符。别担心@Tim Nordenfur,我肯定他不必支付计算机加班费:)