我在另一个主题中询问了有关匹配数字(例如 123)的问题。这太狭窄了,随着我对 Regex 的深入了解,我发现您确实必须定义任何东西。所以我要求指数符号并在这篇文章中得到答案:/^keyword\s+(-?(?:\d+|\d*\.\d*)(?:[Ee]-?(?:\d+|\d*\.\d*))?)/
。我试图理解这一点,但到目前为止失败了。
所以我现在问的更具体。我需要匹配数字,我在这里举一些例子:
13
-999
83.12300
.151
-.213
1e14
124e2
-9e-4
你明白了,普通的数学东西。
更具体地说,我给你我的 Perl 代码。我正在搜索keyword
一条线上,需要从这条线上获取一个值。我想在一个正则表达式中获得这个值,因为我使用 or 语句的解决方法||
似乎会导致问题。
my $value;
open(FILE,"data.dat") or die "error on opening data: $!\n";
while (my $line = <FILE>) {
if (($line =~ /^keyword\s+(-?(?:\d+|\d*\.\d*)(?:[Ee]-?(?:\d+|\d*\.\d*))?)/x) || ($line =~ /^keyword\s*(\d*\.\d*)/)) {
$value = $1;
};
}
close(FILE);
编辑
感谢所有到目前为止的提示。