網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言:
在開(kāi)發(fā)中我們常常會(huì)使用到正則表達(dá)式,但很奇怪的是,每次你在使用正則表達(dá)式的時(shí)候你都發(fā)現(xiàn)你不會(huì)寫(xiě),不知道語(yǔ)法,可能你大概還記得一部分,但很模糊,對(duì)于正則表達(dá)式的語(yǔ)法真心記不住,別的程序猿是不是我不清楚,但我是就是這樣子,每次寫(xiě)都會(huì)發(fā)現(xiàn)記不住了,然后又去網(wǎng)上查找資料,又進(jìn)行一次學(xué)習(xí),慢慢的發(fā)現(xiàn)基本語(yǔ)法你又會(huì)了,但實(shí)際上你還是不會(huì),可能是沒(méi)有完全明白或者在實(shí)際開(kāi)發(fā)中沒(méi)有長(zhǎng)期的使用導(dǎo)致,今天寫(xiě)這篇文章純屬嘮嗑,其余的差不多都是復(fù)制粘貼了,另外說(shuō)一下最近這一次翻開(kāi)正則表達(dá)式去匹配浮點(diǎn)型數(shù)據(jù)做的一點(diǎn)思路,這一點(diǎn)和之前的是不一樣的。以前寫(xiě)的正則去匹配浮點(diǎn)型的時(shí)候會(huì)發(fā)現(xiàn)無(wú)法完全正確的匹配,找了網(wǎng)上不少的高手或者菜鳥(niǎo)教程直接抄過(guò)來(lái)使用,發(fā)現(xiàn)其實(shí)都是有問(wèn)題的,問(wèn)題出在哪兒呢,大部分出現(xiàn)的問(wèn)題都是在處理"0"和".“的情況下。你可能忘記了,我可以幫大家會(huì)議一下,當(dāng)然大部分還是對(duì)的,但是如果出現(xiàn)以0開(kāi)頭的時(shí)候,你會(huì)發(fā)現(xiàn),我可以輸入n個(gè)0開(kāi)頭也能匹配出來(lái),雖然有點(diǎn)會(huì)把連續(xù)的多個(gè)0開(kāi)頭的部分丟掉,但還是讓人感覺(jué)匹配的不是很好,我有強(qiáng)迫癥,這種匹配我認(rèn)為是不正確的,另外就是”.",當(dāng)你使用"."的時(shí)候,你會(huì)發(fā)現(xiàn)"xxxx."像這種格式的都能匹配,這是在逗我嗎,難道這也算正確的,這種情況我會(huì)直接否認(rèn)掉,但是在以往的開(kāi)發(fā)中,我為了完后任務(wù),當(dāng)然也就不管了,沒(méi)那么嚴(yán)格,對(duì)于上面出現(xiàn)的這幾種情況我都心有不甘的默認(rèn)了,畢竟開(kāi)發(fā)需要的時(shí)間不能都花在搞這種問(wèn)題上,時(shí)間那么有限,所以我當(dāng)然就默許了這種問(wèn)題的存在。今天呢又來(lái)搞了搞正則,還是相同的東西,我想自己寫(xiě)了,所以自己開(kāi)搞了,廢話有點(diǎn)多了,接下來(lái)就進(jìn)入主題吧。
正則表達(dá)式
1、非負(fù)浮點(diǎn)型:(^[1-9]\d*\.\d+$|^0\.\d+$|^[1-9]\d*$|^0$)
2、浮點(diǎn)型:(^-?[1-9]\d*\.\d+$|^-?0\.\d+$|^-?[1-9]\d*$|^0$)
上面的正則是怎么寫(xiě)的呢?我來(lái)講一講
將浮點(diǎn)型數(shù)據(jù)做拆分,為啥要拆分呢,因?yàn)椴徊鸱趾茈y實(shí)現(xiàn)匹配浮點(diǎn)型字符串的正確格式
拆分成4類
1、非0開(kāi)頭的浮點(diǎn)型(123.12)
2、0開(kāi)頭的浮點(diǎn)型(0.12)
3、非0整數(shù)型
4、0
分別正則表達(dá)式
1、^[1-9]\d*\.\d+$
2、^0\.\d+$
3、^[1-9]\d*$
4、^0$
最后將4個(gè)表達(dá)式組合到一個(gè)中就得到最終的結(jié)果
(^[1-9]\d*\.\d+$|^0\.\d+$|^[1-9]\d*$|^0$)
浮點(diǎn)型是存在正負(fù)數(shù)的,所以還需要給得到的正則表達(dá)式添加符號(hào)
(^-?[1-9]\d*\.\d+$|^-?0\.\d+$|^-?[1-9]\d*$|^0$)
語(yǔ)法解析
符號(hào) | 描述 |
---|---|
^ | 以什么開(kāi)頭 |
$ | 以什么結(jié)尾 |
. | 匹配任意非\n的單字符 |
\. | 匹配. |
+ | 匹配一次或多次 |
* | 匹配0次或多次 |
? | 匹配0次或1次 |
x|y | 表示匹配x或者y |
{n} | 表示匹配n次 |
[1-9] | 表示范圍1至9的任意1個(gè)數(shù)字 |
() | 強(qiáng)制優(yōu)先級(jí),匹配括號(hào)需要在括號(hào)前加"\" |
- | 表示負(fù)號(hào) |
Java代碼
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
String str = "";
String pattern = "(^[1-9]\\d*\\.\\d+$|^0\\.\\d+$|^[1-9]\\d*$|^0$)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
}
}
附:正則表達(dá)式(同時(shí)匹配整型數(shù)和浮點(diǎn)數(shù))
pattern="^[1-9]*[0-9]?(\.[0-9]{1,2})?$"
總結(jié)
原文鏈接:https://blog.csdn.net/renfng/article/details/113181976
相關(guān)推薦
- 2023-04-10 Android序列化接口Parcelable與Serializable接口對(duì)比_Android
- 2023-12-18 SerializationException異常產(chǎn)生原因及解決方案
- 2022-05-13 Centos error: cannot remove “core“: snap “core“ is
- 2022-06-01 Python讀取csv文件做K-means分析詳情_(kāi)python
- 2023-07-02 oracle數(shù)據(jù)庫(kù)排序后如何獲取第一條數(shù)據(jù)_oracle
- 2023-05-03 Pycharm?Terminal?與Project?interpreter?安裝包不同步問(wèn)題解決_p
- 2022-04-12 Redis?Server啟動(dòng)過(guò)程的詳細(xì)步驟_Redis
- 2022-04-08 從頭學(xué)習(xí)C語(yǔ)言之for語(yǔ)句和循環(huán)嵌套_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支