利用正則表達(dá)式匹配浮點(diǎn)型數(shù)據(jù)
前言:
在開發(fā)中我們常常會(huì)使用到正則表達(dá)式,但很奇怪的是,每次你在使用正則表達(dá)式的時(shí)候你都發(fā)現(xiàn)你不會(huì)寫,不知道語法,可能你大概還記得一部分,但很模糊,對于正則表達(dá)式的語法真心記不住,別的程序猿是不是我不清楚,但我是就是這樣子,每次寫都會(huì)發(fā)現(xiàn)記不住了,然后又去網(wǎng)上查找資料,又進(jìn)行一次學(xué)習(xí),慢慢的發(fā)現(xiàn)基本語法你又會(huì)了,但實(shí)際上你還是不會(huì),可能是沒有完全明白或者在實(shí)際開發(fā)中沒有長期的使用導(dǎo)致,今天寫這篇文章純屬嘮嗑,其余的差不多都是復(fù)制粘貼了,另外說一下最近這一次翻開正則表達(dá)式去匹配浮點(diǎn)型數(shù)據(jù)做的一點(diǎn)思路,這一點(diǎn)和之前的是不一樣的。以前寫的正則去匹配浮點(diǎn)型的時(shí)候會(huì)發(fā)現(xiàn)無法完全正確的匹配,找了網(wǎng)上不少的高手或者菜鳥教程直接抄過來使用,發(fā)現(xiàn)其實(shí)都是有問題的,問題出在哪兒呢,大部分出現(xiàn)的問題都是在處理"0"和".“的情況下。你可能忘記了,我可以幫大家會(huì)議一下,當(dāng)然大部分還是對的,但是如果出現(xiàn)以0開頭的時(shí)候,你會(huì)發(fā)現(xiàn),我可以輸入n個(gè)0開頭也能匹配出來,雖然有點(diǎn)會(huì)把連續(xù)的多個(gè)0開頭的部分丟掉,但還是讓人感覺匹配的不是很好,我有強(qiáng)迫癥,這種匹配我認(rèn)為是不正確的,另外就是”.",當(dāng)你使用"."的時(shí)候,你會(huì)發(fā)現(xiàn)"xxxx."像這種格式的都能匹配,這是在逗我嗎,難道這也算正確的,這種情況我會(huì)直接否認(rèn)掉,但是在以往的開發(fā)中,我為了完后任務(wù),當(dāng)然也就不管了,沒那么嚴(yán)格,對于上面出現(xiàn)的這幾種情況我都心有不甘的默認(rèn)了,畢竟開發(fā)需要的時(shí)間不能都花在搞這種問題上,時(shí)間那么有限,所以我當(dāng)然就默許了這種問題的存在。今天呢又來搞了搞正則,還是相同的東西,我想自己寫了,所以自己開搞了,廢話有點(diǎn)多了,接下來就進(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$)
上面的正則是怎么寫的呢?我來講一講
將浮點(diǎn)型數(shù)據(jù)做拆分,為啥要拆分呢,因?yàn)椴徊鸱趾茈y實(shí)現(xiàn)匹配浮點(diǎn)型字符串的正確格式
拆分成4類
1、非0開頭的浮點(diǎn)型(123.12)
2、0開頭的浮點(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á)式添加符號
(^-?[1-9]\d*\.\d+$|^-?0\.\d+$|^-?[1-9]\d*$|^0$)
語法解析
符號 | 描述 |
---|---|
^ | 以什么開頭 |
$ | 以什么結(jié)尾 |
. | 匹配任意非\n的單字符 |
\. | 匹配. |
+ | 匹配一次或多次 |
* | 匹配0次或多次 |
? | 匹配0次或1次 |
x|y | 表示匹配x或者y |
{n} | 表示匹配n次 |
[1-9] | 表示范圍1至9的任意1個(gè)數(shù)字 |
() | 強(qiáng)制優(yōu)先級,匹配括號需要在括號前加"\" |
- | 表示負(fù)號 |
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é)
到此這篇關(guān)于利用正則表達(dá)式匹配浮點(diǎn)型數(shù)據(jù)的文章就介紹到這了,更多相關(guān)正則匹配浮點(diǎn)型數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
正則表達(dá)式基礎(chǔ)學(xué)習(xí)一文入門
這篇文章主要為大家介紹了正則表達(dá)式基礎(chǔ)學(xué)習(xí)一文入門詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03正則表達(dá)式、分組、子匹配(子模式)、非捕獲子匹配(子模式)
前面我們知道正則表達(dá)式有很多元字符表示匹配次數(shù)(量詞),都是可以重復(fù)匹配前面出現(xiàn)的單個(gè)字符次數(shù),需要的朋友可以參考下2016-06-06