使用正则表达式在单词的最后一个实例之后捕获文本

时间:2014-12-09 14:00:52

标签: regex perl

正则表达式的新手,我有一个包含这个

的数据的文件
[Monkey]
KeyValue=B233

[Monkey]
KeyValue=A421

[Monkey]
KeyValue=Z123

[Monkey]
KeyValue=C84

最初我在使用

KeyValue=(.*) 

在等号后捕捉一切。但现在我需要在KeyValue=

的最后一次出现后的值

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

为正则表达式添加锚点

KeyValue=.*$

Regex Example

  • $将正则表达式锚定在字符串的末尾。确保没有任何内容

答案 1 :(得分:0)

使用否定先行断言:

KeyValue=(\w+)(?![\s\S]*KeyValue)

如果您使用[\s\S]标记,则可以将.替换为DOTALL

Demo in Regex101


my $text = <<EOS;
[Monkey]
KeyValue=B233

[Monkey]
KeyValue=A421

[Monkey]
KeyValue=Z123

[Monkey]
KeyValue=C84
OtherValue=XYZ
EOS

$text =~ /KeyValue=(\w+)(?!.*KeyValue)/s;
print $1;