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