首頁 > 軟體

利用正規表示式匹配浮點型資料

2022-05-27 14:03:34

前言:

在開發中我們常常會使用到正規表示式,但很奇怪的是,每次你在使用正規表示式的時候你都發現你不會寫,不知道語法,可能你大概還記得一部分,但很模糊,對於正規表示式的語法真心記不住,別的程式猿是不是我不清楚,但我是就是這樣子,每次寫都會發現記不住了,然後又去網上查詢資料,又進行一次學習,慢慢的發現基本語法你又會了,但實際上你還是不會,可能是沒有完全明白或者在實際開發中沒有長期的使用導致,今天寫這篇文章純屬嘮嗑,其餘的差不多都是複製貼上了,另外說一下最近這一次翻開正規表示式去匹配浮點型資料做的一點思路,這一點和之前的是不一樣的。以前寫的正則去匹配浮點型的時候會發現無法完全正確的匹配,找了網上不少的高手或者菜鳥教學直接抄過來使用,發現其實都是有問題的,問題出在哪兒呢,大部分出現的問題都是在處理"0"和".“的情況下。你可能忘記了,我可以幫大家會議一下,當然大部分還是對的,但是如果出現以0開頭的時候,你會發現,我可以輸入n個0開頭也能匹配出來,雖然有點會把連續的多個0開頭的部分丟掉,但還是讓人感覺匹配的不是很好,我有強迫症,這種匹配我認為是不正確的,另外就是”.",當你使用"."的時候,你會發現"xxxx."像這種格式的都能匹配,這是在逗我嗎,難道這也算正確的,這種情況我會直接否認掉,但是在以往的開發中,我為了完後任務,當然也就不管了,沒那麼嚴格,對於上面出現的這幾種情況我都心有不甘的預設了,畢竟開發需要的時間不能都花在搞這種問題上,時間那麼有限,所以我當然就默許了這種問題的存在。今天呢又來搞了搞正則,還是相同的東西,我想自己寫了,所以自己開搞了,廢話有點多了,接下來就進入主題吧。

正規表示式

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個數位
()強制優先順序,匹配括號需要在括號前加""
-表示負號

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})?$"

總結

到此這篇關於利用正規表示式匹配浮點型資料的文章就介紹到這了,更多相關正則匹配浮點型資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com