用正则表达式匹配

表示数值的字符串

http://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2

来玩正则表达式吧!~

import java.util.regex.Pattern;

public class Solution {
    public static boolean isNumeric(char[] str) {
        String pattern = "^[-+]?\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?$";
        String s = new String(str);
        return Pattern.matches(pattern,s);
    }
}

^ 和 美元符号框定正则表达式,它指引这个正则表达式对文本中的所有字符都进行匹配。如果省略这些标识,那么只要一个字符串中包含一个数字这个正则表达式就会进行匹配。如果仅包含 ^ ,它将匹配以一个数字开头的字符串。如果仅包含$ ,则匹配以一个数字结尾的字符串。

[-+]?

正负号后面的 ? 后缀表示这个负号是可选的,表示有0到1个负号或者正号

\\d*

\d的含义和[0-9]一样。它匹配一个数字。后缀 * 指引它可匹配零个或者多个数字。

(?:\\.\\d*)?

(?: …)?表示一个可选的非捕获型分组。* 指引这个分组会匹配后面跟随的0个或者多个数字的小数点。

(?:[eE][+\\-]?\d+)?

这是另外一个可选的非捕获型分组。它会匹配一个e(或E)、一个可选的正负号以及一个或多个数字。

全部评论
我把?:去掉了也能通过,可选是括号后面的?决定的,括号里的?:在这里好像没有区别? "^[-+]?\\d*(\\.\\d*)?([eE][+\\-]?\\d+)?$"
2 回复 分享
发布于 2020-02-21 15:01
好的,谢谢你!
1 回复 分享
发布于 2019-11-28 12:34
(?:\\.\\d*)?这里的d*应该为d+吧,否则1.就能通过你这个匹配了。
1 回复 分享
发布于 2020-03-18 19:33
\\d+)?$ 最后一个+号是什么意思呢?
点赞 回复 分享
发布于 2019-11-27 21:08
(?:[eE][+\\-]?\d+)?匹配指数部分, \\d匹配数字, +号表示数字有一个或者多个,一个合法的指数部分应该是e或者E开头接上至少1个或者多个数字。正则表达式中 * 号表示前一个位置出现0次或多次, +号表示前一个位置出现1次或多次。
点赞 回复 分享
发布于 2019-11-28 11:42
可以问一下 这样的正则表达式为什么不可以 pattern = re.compile(r'^[+|-]?[0-9]*(.[0-9]*)?([e|E][+|-]?[0-9]+)?$') 也就是不用?:为什么会报错
点赞 回复 分享
发布于 2019-12-03 15:49
这笔试面试时候咋写出来233333
点赞 回复 分享
发布于 2020-03-07 21:19
这个正则能匹配-01.2,但这个并不是数值啊
点赞 回复 分享
发布于 2020-03-29 15:19
.1这样的也能匹配
点赞 回复 分享
发布于 2020-05-06 19:19
.也不是数字啊
点赞 回复 分享
发布于 2020-09-02 20:23
(?:[eE][+\\-]?\\d+) 这里为什么写成[+\\-]而不是[+-]
点赞 回复 分享
发布于 2021-02-03 00:07

相关推荐

职场水母:你确定你不是在反串?另外这里是牛客,
点赞 评论 收藏
分享
评论
75
10
分享

创作者周榜

更多
牛客网
牛客企业服务