标签: qr-operator

如何在C中用Perl 5.12创建qr?

这在5.8和5.10中一直在为我工作,但在5.12中我的代码创建了这个奇怪的非qr对象:

# running "print Dumper($regex)"
$VAR1 = bless( do{\(my $o = '')}, 'Regexp' );
Run Code Online (Sandbox Code Playgroud)

打印qr //不是由我的代码创建的,如下所示:

# running "print Dumper(qr/foo/i)"
$VAR1 = qr/(?i-xsm:foo)/;
Run Code Online (Sandbox Code Playgroud)

我的代码基本上是:

REGEXP *rx = re_compile(pattern, flags);
SV *regex = sv_2mortal(newSVpv("",0));

sv_magic(regex, (SV*)rx, PERL_MAGIC_qr, 0, 0);

stash = gv_stashpv("Regexp", 0);
sv_bless(newRV((SV*)regex), stash);
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何从5.12中的字符串正确创建一个正则表达式?

regex perl xs qr-operator

14
推荐指数
3
解决办法
358
查看次数

Perl qr //和替换

我正在编写一个使用Getops接受用户输入的小程序,并且基于它,程序将尝试将模式与某些文本匹配,或者将文本替换为匹配的文本.

我遇到的问题是我无法让替换部分工作.我正在查看手册页中的qr //条目:http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators但我没有运气.我试图模拟我的代码,就像本案例中的文档一样.我编译一个匹配模式,并将其替换为替换.

有人能指出我哪里错了吗?(不要太担心安全性,这只是个人用的小脚本)

这就是我在看的内容:

if($options{r}){

    my $pattern = $options{r};
    print "\nEnter Replacement text: ";
    my $rep_text = <STDIN>;

    #variable grab, add flags to pattern if they exist.
    $pattern .= 'g' if $options{g};
    $pattern .= 'i' if $options{i};
    $pattern .= 's' if $options{s};


    #compile that stuff
    my $compd_pattern = qr"$pattern" or die $@;
    print $compd_pattern; #debugging

    print "Please enter the text you wish to run the pattern on: ";
    my $text = <STDIN>;
    chomp $text;    

    #do …
Run Code Online (Sandbox Code Playgroud)

regex perl substitution qr-operator

6
推荐指数
2
解决办法
9751
查看次数

如何将修饰符添加到带引号的常规(qr)表达式中

有没有一种简单的方法可以将正则表达式修饰符(如"i")添加到引用的正则表达式中?例如:

$pat = qr/F(o+)B(a+)r/;
$newpat = $pat . 'i'; # This doesn't work
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法就是print "$pat\n"回过头来(?-xism:F(o+)B(a+)r)尝试?-xism:用替换去除'i'

regex perl modifier stringification qr-operator

6
推荐指数
1
解决办法
677
查看次数

我必须在Perl预编译的正则表达式中逃避哪些字符?

在使用Perl的qr {}构造时,我很难确定必须转义哪些字符

我正在尝试为包含大量正常转义字符(#*.>:[])的文本创建多行预编译正则表达式,并且还包含另一个预编译的正则表达式.另外,我需要尽可能严格地进行匹配以进行测试.

my $output = q{# using defaults found in .config
*
*
Options:
  1. opt1
> 2. opt2
choice[1-2?]: };

my $sc = qr{(>|\s)}smx;
my $re = qr{# using defaults found in .config
*
*
Options:
$sc 1. opt1
$sc 2. opt2
choice[1-2?]: }mx;

if ( $output =~ $re ) {
  print "OK!\n";
}
else {
  print "D'oh!\n";
}
Run Code Online (Sandbox Code Playgroud)

错误:

Quantifier follows nothing in regex; marked by <-- HERE in m/# using defaults found in .config …
Run Code Online (Sandbox Code Playgroud)

regex perl multiline qr-operator

5
推荐指数
2
解决办法
7101
查看次数