Java 中的正則表達(dá)式單字符預(yù)定義字符匹配問(wèn)題
一、需求
? 現(xiàn)有一個(gè)字符串,需滿足如下要求:
① [6, 18] 個(gè)字符
② 只能包含字母、數(shù)字、下劃線
③ 需以字母開(kāi)頭
? 如果字符串滿足上述要求,返回 true,否則返回 false
public static boolean validString(String s) { return s.matches("[a-zA-Z][a-zA-Z0-9_]{5,17}"); }
?? 正則表達(dá)式用極簡(jiǎn)的規(guī)則取代了復(fù)雜的驗(yàn)證邏輯
?? Regex Expression
?? 正則表達(dá)式是一種通用的技術(shù),適用于多種編程語(yǔ)言
二、單字符匹配(6個(gè))
?? ① [abc]
:字符串的某個(gè)位置(某一個(gè)字符)滿足 a、b、c 中的一個(gè)
??
某個(gè)位置
:該【單字符匹配】放的位置
public class TestDemo { public static void main(String[] args) { String regex = "[zgq]"; System.out.println("z".matches(regex)); // true System.out.println("g".matches(regex)); // true System.out.println("q".matches(regex)); // true System.out.println("zgq".matches(regex)); // false } }
public class TestDemo { public static void main(String[] args) { String regex = "26[abc]3q"; System.out.println("26a3q".matches(regex)); // true System.out.println("26abc".matches(regex)); // false System.out.println("26b3q".matches(regex)); // true } }
?? ② [^abc]
:除了 a、b、c 之外的任意單個(gè)字符
public class TestDemo { public static void main(String[] args) { String regex = "[^cat]666"; System.out.println("c666".matches(regex)); // false System.out.println("a666".matches(regex)); // false System.out.println("t666".matches(regex)); // false System.out.println("bb666".matches(regex)); // false System.out.println("b666".matches(regex)); // true } }
public class TestDemo { public static void main(String[] args) { String regex1 = "[12345]666"; String regex2 = "[^1-5]666"; System.out.println("1666".matches(regex1)); // true System.out.println("3666".matches(regex1)); // true System.out.println("5666".matches(regex1)); // true System.out.println("6666".matches(regex1)); // false System.out.println("1666".matches(regex2)); // false System.out.println("3666".matches(regex2)); // false System.out.println("5666".matches(regex2)); // false System.out.println("6666".matches(regex2)); // true } }
?? ③ [a-zA-z]
:匹配單個(gè)英文字母
public class TestDemo { public static void main(String[] args) { String regex = "[a-zA-Z]666"; System.out.println("6666".matches(regex)); // false System.out.println("b666".matches(regex)); // true } }
?? ④ [a-d[1-6]]
:和 [a-d1-6]
一樣(并集)
public class TestDemo { public static void main(String[] args) { String regex1 = "[a-d[1-6]]"; String regex2 = "[a-d1-6]"; System.out.println("a".matches(regex1)); // true System.out.println("e".matches(regex1)); // false System.out.println("1".matches(regex1)); // true System.out.println("7".matches(regex1)); // false System.out.println("a".matches(regex2)); // true System.out.println("e".matches(regex2)); // false System.out.println("1".matches(regex2)); // true System.out.println("7".matches(regex2)); // false } }
?? ⑤ [zgq&&[god]]
:交集
public class TestDemo { public static void main(String[] args) { String regex1 = "[zgq&&[god]]"; System.out.println("q".matches(regex1)); // false System.out.println("d".matches(regex1)); // false System.out.println("g".matches(regex1)); // true } }
?? ⑥ [zgq&&[god]]
:取差集
public class TestDemo { public static void main(String[] args) { String regex1 = "[zgq&&[^god]]"; System.out.println("q".matches(regex1)); // true System.out.println("d".matches(regex1)); // false System.out.println("g".matches(regex1)); // false System.out.println("z".matches(regex1)); // true // 取差集, 從字母 a 到字母 z 中去除字母 b 和 d String regex2 = "[a-z&&[^bd]]"; System.out.println("d".matches(regex2)); // false System.out.println("a".matches(regex2)); // true } }
三、預(yù)定義字符(7個(gè))
預(yù)定義字符匹配的仍然是單個(gè)字符
?? 【.】:任意單個(gè)字符
?? 【\d】:數(shù)字
?? 【\D】:非數(shù)字
?? 【\s】:空白
?? 【\S】:非空白
?? 【\w】:字母(英文字母、下劃線、數(shù)字)
?? 【\W】:非英文字母
?? Java 中需以兩個(gè)【\】開(kāi)頭表示預(yù)定義字符
public class TestDemo { public static void main(String[] args) { String r1 = "."; System.out.println("@".matches(r1)); // true System.out.println("慶".matches(r1)); // true System.out.println("I".matches(r1)); // true System.out.println(" ".matches(r1)); // true System.out.println(".".matches(r1)); // true } }
public class TestDemo { public static void main(String[] args) { // 匹配 java 文件 String r1 = ".\\.java"; System.out.println("a.java".matches(r1)); // true System.out.println("xjava".matches(r1)); // false System.out.println("5java".matches(r1)); // false } }
public class TestDemo { public static void main(String[] args) { String r1 = "[abc]"; String r2 = "\\[abc\\]"; System.out.println("a".matches(r1)); // true System.out.println("c".matches(r1)); // true System.out.println("[abc]".matches(r1)); // false System.out.println("a".matches(r2)); // false System.out.println("c".matches(r2)); // false System.out.println("[abc]".matches(r2)); // true } }
到此這篇關(guān)于Java 中的正則表達(dá)式(單字符匹配和預(yù)定義字符)的文章就介紹到這了,更多相關(guān)java正則表達(dá)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java判斷是否是整數(shù),小數(shù)或?qū)崝?shù)的正則表達(dá)式
這篇文章主要介紹了詳解Java判斷是否是整數(shù),小數(shù)或?qū)崝?shù)的正則表達(dá)式,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2016-12-12比較常用的幾個(gè)正則表達(dá)式匹配數(shù)字(收藏)
正則表達(dá)式用于字符串處理、表單驗(yàn)證等場(chǎng)合,實(shí)用高效。今天小編給大家分享比較常用的幾個(gè)正則表達(dá)式匹配數(shù)字,需要的朋友參考下2017-03-03js通過(guò)正則匹配沒(méi)有內(nèi)容的空標(biāo)簽
這篇文章主要介紹了js通過(guò)正則匹配沒(méi)有內(nèi)容的空標(biāo)簽,需要的朋友可以參考下2020-02-02詳解PHP正則表達(dá)式替換實(shí)現(xiàn)(PHP preg_replace,PHP preg_replace)
PHP正則表達(dá)式替換實(shí)現(xiàn)是如何的呢?首先向你介紹下PHP preg_replace,PHP preg_replace的使用是我們實(shí)現(xiàn)的方法,那么對(duì)于PHP正則表達(dá)式替換實(shí)現(xiàn)過(guò)程我們從實(shí)例入手,感興趣的跟著小編一起了解了解吧2015-09-09Javascript Validation for email(正則表達(dá)式) 英文翻譯
javascript中通過(guò)正則表達(dá)式驗(yàn)證email地址是否符合規(guī)則,需要的朋友可以參考下。2011-10-10