任何人都可以帮助我使用这个正则表达式吗?我需要一个表达式来匹配末尾不包含“Created”字符串的行。此脚本用于读取某些源代码的标题。
$string = "* JAN-01-2001 bugsbunny 1234 Created Module";
#$string = "* DEC-12-2012 bugsbunny 5678 Modified Module";
if($string =~ /^\*\s+(\w\w\w-\d\d-\d\d\d\d)\s+(\w+)\s+(\d+)\s+(?!Created)/){
print "$1\n$2\n$3\n$4\n";
} else {
print "no match\n";
}
当使用第一个 $string 定义时,我需要匹配失败,因为它的末尾有“Created”这个词。使用第二个 $string 定义时,它应该通过,我需要提取日期($1)、用户($2)、更改编号($3)和描述($4)。
上面的表达式不起作用。请问有什么建议吗?
最佳答案
关闭:
/^\*\s+(\w{3}-\d{2}-\d{4})\s+(\w+)\s+(\d+)\s+(?!.*Created)/
您需要在
Created
之前允许任意数量的非换行符,因此 .*
.否则,正则表达式将在匹配
\s+
时简单地备份一个字符。 ,所以下面的文字是 " Created"
,然后 (?!Created)
会匹配。看到它here ;注意比赛是如何在
Created
前停止一个空格的.
关于regex - Perl Regex 正则表达式匹配字符串除外,不匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14702607/