java正则 环视_正则表达式之环视(java)
這段代碼中真正匹配到的字符串是”ld”,所謂的順序環(huán)視就是在匹配這個(gè)字符串前的那個(gè)位置。
相信大家現(xiàn)在應(yīng)該能夠推測(cè)出逆序環(huán)視了吧。匹配的是ld后面那個(gè)位置。
環(huán)視的例子
理解了上訴環(huán)視的列子我們來(lái)解決一開始那個(gè)問題。我們可以先分析一下,需要滿足這樣的條件。左邊要是數(shù)字,右邊的數(shù)字個(gè)數(shù)是3的倍數(shù)。
接下來(lái)就是對(duì)這個(gè)條件所實(shí)現(xiàn)的java代碼。
String str = "12345678";
Pattern pattern= Pattern.compile("(?<=\\d)(?=(\\d{3})+$)");
Matcher matcher=pattern.matcher(str);
System.out.printf(matcher.replaceAll(","));
(?<=\\d)這個(gè)表達(dá)式滿足了左邊是數(shù)字,可以想象一下。因?yàn)槟嫘颦h(huán)視是匹配字符串右邊的位置,也就是\d右邊的位置。那不就是說(shuō)明了這個(gè)位置的左邊是\d嗎。對(duì)(?=(\\d{3})+$)的理解可能有點(diǎn)不太容易。如果是孤立的(\\d{3})+$匹配的是從字符串末尾向左數(shù)字的個(gè)數(shù)正好是3的倍數(shù)。但是加入順序環(huán)視之后意義就不一樣了它能匹配右邊數(shù)字的個(gè)數(shù)正好是3的倍數(shù)的位置。$是關(guān)鍵,沒有了這個(gè)符號(hào),也就意味著可以不是從最后一個(gè)數(shù)字開始匹配的。這里可以結(jié)合程序好好的想想。這樣兩個(gè)條件就都滿足了。也就能夠匹配到正確的位置了。
但是如果給的字符串不一定是純數(shù)字,可能是”12345678$”這樣的形式,上訴的正則就不管用了。在這里我再引入兩個(gè)概念就是否定順序環(huán)視(?!)和否定逆序環(huán)視(?
在(?=表達(dá)式)中,意味表達(dá)式能夠匹配右側(cè)的文本,而(?!表達(dá)式)則以為表達(dá)式不能匹配右側(cè)的文本。那么可以將正則改成
"(?<=\\d)(?=(\\d{3})+(?!\\d))"也許你認(rèn)為可以將(?!\\d)改成\D,但是這兩個(gè)其實(shí)是有區(qū)別的,\D是匹配一個(gè)非數(shù)字的字符,也就是說(shuō)必須匹配一個(gè)字符。如果給你的數(shù)字是"12345678"這樣就不能得到匹配了.
總結(jié)
以上是生活随笔為你收集整理的java正则 环视_正则表达式之环视(java)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 8.1初始密码_MySQL8
- 下一篇: java扫描包下类_实现获取扫描指定包路