将“ m”修饰符添加到作为参数传递的二维模式

磨坊主

我希望能够将“ m”修饰符添加到传递给函数的正则表达式中。

以下测试脚本演示了我正在尝试做的事情

#!/usr/bin/env perl

use strict;
use warnings;
use v5.16.3;

use Test::More tests => 3;

my $no_m_modifier_re   = qr{^line1\n^line2};
my $with_m_modifier_re = qr{^line1\n^line2}m;

my $text = <<'EoM';
line1
line2
line3
EoM

unlike( $text, $no_m_modifier_re, 'Text will not match ^ that is equivalent to \A' );
like( $text, $with_m_modifier_re, 'Text will match ^ with m modifier' );

# This fails to add the m modifier to the subexpression
my $add_m_modifier_re = qr{(?m)$no_m_modifier_re};
#my $add_m_modifier_re = qr{(?m:$no_m_modifier_re)};    # Experimented other syntax, with same result
#my $add_m_modifier_re = qr{$no_m_modifier_re}m;
#my $add_m_modifier_re = qr{(?^m:$no_m_modifier_re)};    # suggested by mob, didn't work.

like( $text, $add_m_modifier_re, 'Want this to match, but it fails to add m modifier to subexpression' );

结果是

$ prove -v m_modifier.pl
m_modifier.pl ..
1..3
ok 1 - Text will not match ^ that is equivalent to \A
ok 2 - Text will match ^ with m modifier
not ok 3 - Want this to match, but it fails to add m modifier to subexpression

#   Failed test 'Want this to match, but it fails to add m modifier to subexpression'
#   at m_modifier.pl line 25.
#                   'line1
# line2
# line3
# '
#     doesn't match '(?^:(?m)(?^:^line1\n^line2))'
# Looks like you failed 1 test of 3.
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/3 subtests

Test Summary Report
-------------------
m_modifier.t (Wstat: 256 Tests: 3 Failed: 1)
  Failed test:  3
  Non-zero exit status: 1
Files=1, Tests=3,  1 wallclock secs ( 0.04 usr  0.01 sys +  0.14 cusr  0.05 csys =  0.24 CPU)
Result: FAIL

如您所见,我尝试了添加m修饰符的不同语法,但是它们似乎都不适用于原始模式。

有任何想法吗?

这在Perl 5.16.3下。我没有尝试过更现代的版本。

池上

我按照qr{(?^m:$no_m_modifier_re)}您的建议尝试,但仍然失败。测试报告doesn't match '(?^u:(?^m:(?^u:^line1\n^line2)))'

您正在尝试修改已编译的模式。为此,您需要以下内容:

use re qw( is_regexp regexp_pattern );

my $re = qr/^line1\n^line2/;

my ($pat, $mods) =
   is_regexp($re)
      ? regexp_pattern($re)
      : ( $re, "" );

$mods .= 'm' if $mods !~ /m/;

defined( $re = eval("qr/\$pat/$mods") )
   or die($@);  # Should never happen.

它也可以与未编译的模式一起使用,从而产生具有最小(?:)嵌套的已编译模式

The result for   "abc"       is   qr/abc/m    which stringifies as   (?^um:abc)
The result for   qr/abc/     is   qr/abc/m    which stringifies as   (?^um:abc)
The result for   qr/abc/m    is   qr/abc/m    which stringifies as   (?^um:abc)
The result for   qr/abc/s    is   qr/abc/sm   which stringifies as   (?^ums:abc)
The result for   qr/abc/sm   is   qr/abc/sm   which stringifies as   (?^ums:abc)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python按列将一维数组添加到二维数组

来自分类Dev

如何将函数的二维数组参数作为内部函数的参数传递

来自分类Dev

将--ignore-failed-read添加到tar会导致“未知函数修饰符”错误

来自分类Dev

将修饰符“ c”和“ s”或不添加到“ ar”命令之间的区别的任何示例

来自分类Dev

将数据指针作为参数传递给需要二维数组的函数

来自分类Dev

如何将二维数组类型字符(字符串)作为函数参数传递?

来自分类Dev

Unity:将爆炸力添加到二维

来自分类Dev

将元素添加到二维数组的特定部分

来自分类Dev

如何将列表中的元素添加到二维数组?

来自分类Dev

有效地将值添加到二维数组

来自分类Dev

无法将文件中的条目正确添加到二维指针数组中

来自分类Dev

如何将数组添加到二维数组

来自分类Dev

如何将二维数组直接添加到哈希图中?

来自分类Dev

C#将文本文件添加到二维数组

来自分类Dev

如何使用Google App脚本/ JavaScript将列添加到二维数组

来自分类Dev

如何将某些行添加到二维矩阵?

来自分类Dev

如何将数组添加到二维数组中的每一行?

来自分类Dev

如何将元素添加到空的二维 numpy 数组

来自分类Dev

将二维数组传递给常量参数的函数

来自分类Dev

Numpy:将一维数组(行)添加到 Numpy Python 中的空二维数组

来自分类Dev

将二维数组作为函数参数传递,其维度仅在运行时已知

来自分类Dev

如何将谷歌分析数据添加到应用脚本中的二维数组中

来自分类Dev

将动态参数添加到具有参数的函数中,该参数作为参数传递给当前函数

来自分类Dev

rJava:将二维字符串数组作为函数输入传递

来自分类Dev

将wc结果作为参数添加到管道中

来自分类Dev

从函数返回二维数组,仅将数组大小作为参数

来自分类Dev

将PHP变量添加到JQuery Post传递的参数

来自分类Dev

将方法添加到列表并传递匿名参数

来自分类Dev

将整行附加到二维数组

Related 相关文章

  1. 1

    Python按列将一维数组添加到二维数组

  2. 2

    如何将函数的二维数组参数作为内部函数的参数传递

  3. 3

    将--ignore-failed-read添加到tar会导致“未知函数修饰符”错误

  4. 4

    将修饰符“ c”和“ s”或不添加到“ ar”命令之间的区别的任何示例

  5. 5

    将数据指针作为参数传递给需要二维数组的函数

  6. 6

    如何将二维数组类型字符(字符串)作为函数参数传递?

  7. 7

    Unity:将爆炸力添加到二维

  8. 8

    将元素添加到二维数组的特定部分

  9. 9

    如何将列表中的元素添加到二维数组?

  10. 10

    有效地将值添加到二维数组

  11. 11

    无法将文件中的条目正确添加到二维指针数组中

  12. 12

    如何将数组添加到二维数组

  13. 13

    如何将二维数组直接添加到哈希图中?

  14. 14

    C#将文本文件添加到二维数组

  15. 15

    如何使用Google App脚本/ JavaScript将列添加到二维数组

  16. 16

    如何将某些行添加到二维矩阵?

  17. 17

    如何将数组添加到二维数组中的每一行?

  18. 18

    如何将元素添加到空的二维 numpy 数组

  19. 19

    将二维数组传递给常量参数的函数

  20. 20

    Numpy:将一维数组(行)添加到 Numpy Python 中的空二维数组

  21. 21

    将二维数组作为函数参数传递,其维度仅在运行时已知

  22. 22

    如何将谷歌分析数据添加到应用脚本中的二维数组中

  23. 23

    将动态参数添加到具有参数的函数中,该参数作为参数传递给当前函数

  24. 24

    rJava:将二维字符串数组作为函数输入传递

  25. 25

    将wc结果作为参数添加到管道中

  26. 26

    从函数返回二维数组,仅将数组大小作为参数

  27. 27

    将PHP变量添加到JQuery Post传递的参数

  28. 28

    将方法添加到列表并传递匿名参数

  29. 29

    将整行附加到二维数组

热门标签

归档