用正则表达式匹配

表示数值的字符串

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

相关推荐

不吃牛肉的选手在刷面试经:首先,你数过吗?其次,他知道吗?最后,你说了他信吗?
点赞 评论 收藏
分享
下北泽:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
评论
75
10
分享

创作者周榜

更多
牛客网
牛客企业服务