匹配两个字符,中间有多行

时间:2016-05-11 06:44:54

标签: regex perl

我是regex的新手,我正在使用Perl。

我有以下标签:

<CFSC>cfsc_service=TRUE
SEC=1
licenses=10
expires=20170511
</CFSC>

我想匹配<CFSC></CFSC>代码之间的任何内容。

我试过/<CFSC>.*?\n.*?\n.*?\n.*?\n<\/CFSC>//<CFSC>(.*)<\/CFSC>/但没有运气。

3 个答案:

答案 0 :(得分:3)

您需要/s single line modifier才能使正则表达式引擎在.中包含换行符。

  

将字符串视为单行。也就是说,改变&#34;。&#34;匹配任何字符,甚至是换行符,通常它不匹配。

见这个例子。

my $foo = qq{<CFSC>cfsc_service=TRUE
SEC=1
licenses=10
expires=20170511
</CFSC>};

$foo =~ m{>(.*)</CFSC>}s;

print $1;

您还需要使用与/不同的分隔符,或者将其转义。

答案 1 :(得分:1)

尝试

/<CFSC>(.*)<\/CFSC>/s

最终s使.匹配换行符(\n = 0x0a)通常不匹配:

  

将字符串视为单行。也就是说,改变&#34;。&#34;匹配任何   任何角色,甚至是换行符,通常不会   匹配。

来自http://perldoc.perl.org/perlre.html#Modifiers

答案 2 :(得分:0)

试试这个:

$foo =~ m/<CFSC>((?:(?!<\/CFSC>).)*)<\/CFSC>/gs;

改性剂:

       g - Matches global
       s - newline
       i - case sensitive
       \ - escape sequence