如何构建一个与这样的模式匹配的perl正则表达式
以XXX开头,以AAA结尾
(1)在一行内 (2)跨越多行
请帮助,我是正常表达的新手:)
答案 0 :(得分:4)
单行:
/XXX.*?AAA/ # example "foo XXX bar AAA egg" will match "XXX bar AAA"
多行:
/XXX.*?AAA/s
问号?
决定了你表达的贪婪。如果您需要上一次AAA
,则应删除?
。如果您在XXX之后需要第一个AAA,那么它应该在那里。
答案 1 :(得分:1)
答案 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';