日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

利用正則表達(dá)式匹配浮點(diǎn)型數(shù)據(jù)_正則表達(dá)式

作者:R峰 ? 更新時(shí)間: 2022-07-25 編程語(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

欄目分類
最近更新