【问题标题】:JAVA - replaceAll in a regex with $1JAVA - 用$ 1替换正则表达式中的All
【发布时间】:2017-08-30 09:46:53
【问题描述】:

在 CodeFight 问题中,要求提取字符串的第一个数字并将其作为字符串返回,如果它不以数字开头,则返回 null。

我用的是正则表达式,没问题,但我不是很理解最佳答案:

String longestDigitsPrefix(String inputString) {
    return inputString.replaceAll("^(\\d*).*","$1");
}

如果有人能解释一下那就太棒了:)

【问题讨论】:

标签: java regex extract


【解决方案1】:

正则表达式 ^(\\d*).* 始终匹配 整个 输入,捕获(通过括号)前导(^ 表示“输入的开始”)数字(如果有 - *表示 0 或更多,\d 表示“一个数字”)

替换字符串$1 表示“组1”(由一组括号组成的第一组)。


实际上,给出的解决方案并不是最优雅的。这更好/更简单/更快/更具可读性:

String longestDigitsPrefix(String inputString) {
    return inputString.replaceAll("\\D.*", "");
}

此正则表达式从遇到的第一个非数字匹配到末尾,然后将其删除(替换为空)。

【讨论】:

  • 是的,该函数应该返回 null。非常感谢波西米亚人,实际上让我感到困惑的是我认为 ^(\\d*) 与 \\D* 相同!你的解决方案更好!我对 正规表达式 以及它的效率感到非常惊讶,但要掌握它并不容易。
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 2021-03-27
  • 2011-05-09
  • 2010-12-24
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多