Perl正则表达式问题

时间:2011-03-16 15:11:37

标签: regex perl

如何构建一个与这样的模式匹配的perl正则表达式

以XXX开头,以AAA结尾

(1)在一行内 (2)跨越多行

请帮助,我是正常表达的新手:)

4 个答案:

答案 0 :(得分:4)

单行:

/XXX.*?AAA/  # example "foo XXX bar AAA egg" will match "XXX bar AAA"

多行:

/XXX.*?AAA/s

问号?决定了你表达的贪婪。如果您需要上一次AAA,则应删除?。如果您在XXX之后需要第一个AAA,那么它应该在那里。

答案 1 :(得分:1)

所以:

/^XXX.*AAA$/s

s修饰符将输入视为一行(.也匹配换行符。)

Reference

答案 2 :(得分:1)

仅在一行内:

/XXX.*AAA/

跨越多行:

/XXX.*AAA/s

使用额外的/g来匹配所有匹配项。

答案 3 :(得分:1)

您不一定需要一个正则表达式。对于单行:

say 'I matched.' if m/^AAA/ and m/XXX$/;

对于多线:

say 'I matched.' if m/\AAAA/m and m/XXX\z/m;
  • \A =>绝对开头(^只是 a 行的开头。)
  • \z =>绝对结局(如果您想要结束而不关心,可以使用\Z 如果记录分隔符在那里。
  • /m =>多行开关

然而,还有substr适用于任何一个,具有完全字符串:

say 'I matched.' if substr( $_, 0, 3 ) eq 'AAA' and substr( $_, -3 ) eq 'XXX';