gpt4 book ai didi

regex - (?^ :…) mean in the string form of a Perl qr//Regex? 中的插入符号 ^ 是什么

转载 作者:行者123 更新时间:2023-12-04 13:30:57 26 4
gpt4 key购买 nike

考虑这个脚本,它基于对
SO 267399关于解析罗马
数字,虽然罗马数字的解析是附带的
题。

#!/usr/bin/env perl
#
# Based on answer to SO 0026-7399

use warnings;
use strict;

my $qr1 = qr/(?i:M{1,3})/;
my $qr2 = qr/(?i:C[MD]|D?C{1,3})/;
my $qr3 = qr/(?i:X[CL]|L?X{1,3})/;
my $qr4 = qr/(?i:I[XV]|V?I{1,3})/;

print "1000s: $qr1\n";
print " 100s: $qr2\n";
print " 10s: $qr3\n";
print " 1s: $qr4\n";

# This $qr is too simple — it matches the empty string
#my $qr = qr/($qr1?$qr2?$qr3?$qr4?)/;

my $qr = qr/\b((?:$qr1$qr2?$qr3?$qr4?)|(?:$qr2$qr3?$qr4?)|(?:$qr3$qr4?)|(?:$qr4))\b/;

print " Full: $qr\n";

while (<>)
{
chomp;
print " Line: [$_]\n";
while ($_ =~ m/$qr/g)
{
print "Match: [$1] found in [$_] using qr//\n";
}
}

给定下面的数据文件,前三行每行都包含一个罗马数字。
mix in here
no mix in here
mmmcmlxxxix
minimum

在现在运行 macOS Sierra 的 Mac 上使用(自制)Perl 5.22.0 运行时
10.12.4,我得到这样的输出(但 Perl 的版本不是
危急):
1000s: (?^:(?i:M{1,3}))
100s: (?^:(?i:C[MD]|D?C{1,3}))
10s: (?^:(?i:X[CL]|L?X{1,3}))
1s: (?^:(?i:I[XV]|V?I{1,3}))
Full: (?^:\b((?:(?^:(?i:M{1,3}))(?^:(?i:C[MD]|D?C{1,3}))?(?^:(?i:X[CL]|L?X{1,3}))?(?^:(?i:I[XV]|V?I{1,3}))?)|(?:(?^:(?i:C[MD]|D?C{1,3}))(?^:(?i:X[CL]|L?X{1,3}))?(?^:(?i:I[XV]|V?I{1,3}))?)|(?:(?^:(?i:X[CL]|L?X{1,3}))(?^:(?i:I[XV]|V?I{1,3}))?)|(?:(?^:(?i:I[XV]|V?I{1,3}))))\b)
Line: [mix in here]
Match: [mix] found in [mix in here] using qr//
Line: [no mix in here]
Match: [mix] found in [no mix in here] using qr//
Line: [mmmcmlxxxix]
Match: [mmmcmlxxxix] found in [mmmcmlxxxix] using qr//
Line: [minimum]

我不明白的唯一输出部分是插入符号 ^在里面 (?^:…)符号。

我已经查看了 Perl 文档
perlre
perlref 甚至部分
perlop
在没有看到这个示例或
解释了。 (当您询问有关正则表达式的问题时,我还检查了 SO 建议的资源。 (?^: 字符串经过精心设计,旨在为搜索引擎提供信息。)

我的问题有两个部分:
  • (?^:…)中插入符号的意义是什么?以及是什么引起的
    它被添加到 qr//正则表达式?
  • 如果重要,你如何阻止它被添加到 qr//正则表达式?
  • 最佳答案

    基本上,这意味着应用默认标志(即使它被插入到指定不同的正则表达式中)。
    在引入之前,qr 会产生类似 (?-ismx: 的东西。一个新的标志被添加到 Perl 会做出改变,这使得保持测试
    至今痛苦。

    http://perldoc.perl.org/perlre.html#Extended-Patterns :

    从 Perl 5.14 开始,紧跟在“?”之后的“^”(插入符号或抑扬符号)是相当于 d-imnsx 的简写。标志(除了 "d")可以跟随插入符号来覆盖它。但是减号是不合法的。

    关于regex - (?^ :…) mean in the string form of a Perl qr//Regex? 中的插入符号 ^ 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902898/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com