我是regex的新手,我正在使用Perl。
我有以下标签:
<CFSC>cfsc_service=TRUE
SEC=1
licenses=10
expires=20170511
</CFSC>
我想匹配<CFSC>
和</CFSC>
代码之间的任何内容。
我试过/<CFSC>.*?\n.*?\n.*?\n.*?\n<\/CFSC>/
和/<CFSC>(.*)<\/CFSC>/
但没有运气。
答案 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;匹配任何 任何角色,甚至是换行符,通常不会 匹配。
答案 2 :(得分:0)
试试这个:
$foo =~ m/<CFSC>((?:(?!<\/CFSC>).)*)<\/CFSC>/gs;
改性剂:
g - Matches global
s - newline
i - case sensitive
\ - escape sequence