gpt4 book ai didi

regex - 如何在 Perl 正则表达式中捕捉一个点?

转载 作者:行者123 更新时间:2023-12-02 09:22:05 25 4
gpt4 key购买 nike

我正在尝试执行这行代码:

  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”。

最佳答案

你要匹配的字符串被匹配

(?:\d+(?:\.\d+)?|\.\d+)oz

(Wiktor Stribiżew 发布了一些更短的内容,但效率要低得多。)

所以你想要

if ( my ($match) = $test =~ /(\d+(?:\.\d+)?|\.\d+)oz/ ) {
say $match;
}

如果您输入 .15..15,则您不可能匹配 0.15。只需独立于匹配项修复字符串。

$match = "0".$match if $match =~ /^\./;

同样,修剪前导零最好在匹配之外完成。

$match =~ s/^0+(?!\.)//;

一起,我们得到

if ( my ($match) = $test =~ /(\d+(?:\.\d+)?|\.\d+)oz/ ) {
$match =~ s/^0+(?!\.)//;
$match = "0".$match if $match =~ /^\./;
say $match;
}

关于regex - 如何在 Perl 正则表达式中捕捉一个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41748661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com