【发布时间】:2017-01-19 18:02:33
【问题描述】:
我正在尝试执行这行代码:
my $test = 'test .15oz test';
$test =~ /([\d]+)([\.]?[\d]+)*oz\b/;
print("test=$1\n");
这个的输出是:
test=15
我想抓住那个点。我究竟做错了什么? 最好的办法是以某种方式捕捉 0.15,但现在我连一个点都抓不到。
任何有关从 regex 获得 0.15 的帮助将不胜感激,所以:
0.15 -> 0.15
.15 -> 0.15
..15 -> 0.15
0.0.0.15 -> 0.15
000.15 -> 0.15
15 -> 15
我也试过了:
$test =~ /([\d]+)(\.?[\d]+)*oz\b/;
$test =~ /([\d]+)([.]?[\d]+)*oz\b/;
但没有成功。仍然是“15”。
【问题讨论】:
-
您不应该在字符类中使用反斜杠转义点。只在外面。所以
\.或[.](还有其他风格的正则表达式在出现多余的反斜杠转义时可能会失败,所以最好避免它)。无论如何,这不是这里的问题。 -
字符类本身似乎是多余的。
-
@blubberdiblub 感谢您的建议,但它不起作用:(
-
使用
$test =~ /(\d*\.?\d+)oz\b/; -
@WiktorStribiżew 是的!那行得通,谢谢!这应该是一个答案。顺便提一句。我不知道为什么这个 q 被否决了