regex - 为什么 "Year 2010"=~/([0-4]*)/导致 $1 中的空字符串?

标签 regex perl

如果我跑

"Year 2010" =~ /([0-4]*)/;
print $1;

我得到空字符串。

"Year 2010" =~ /([0-4]+)/;
print $1;

输出“2010”。为什么?

最佳答案

您在第一个表单的字符串“Year 2010”的开头得到一个空匹配,因为 * 将立即匹配 0 位数字。 + 表单必须等到它看到至少一位数字才能匹配。

大概如果你能通过第一种形式的所有匹配,你最终会找到 2010 ......但可能只有在它在 'e' 之前找到另一个空匹配之后,然后在 'a' 之前等等。

关于regex - 为什么 "Year 2010"=~/([0-4]*)/导致 $1 中的空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3985937/

相关文章:

perl - 从 Perl 中的散列中获取具有最高值的键的最简单方法是什么?

Unix 命令的 Perl 用户输入

javascript - 使用 jQuery Validate 避免大写输入

regex - 与 (foo|bar|baz) 相反

perl - 在分配之前测试哈希条目是否存在的更好方法

perl - 删除注释而不影响配置文件中的值

javascript - 时间字符串到日期对象转换js angularJS

java - 正则表达式验证至少两个字符类(字母、数字、特殊字符)

regex - 使用正则表达式帮助查找数字

javascript - 计算 P 中保留非拉丁字符的字符数