Java和JS正則表達(dá)式代碼,判斷是否為空白字符,學(xué)習(xí)筆記PPT元字符,轉(zhuǎn)義字符-詩(shī)書畫唱
編寫一個(gè)java程序,輸入一個(gè)字符串,進(jìn)行如下的正則表達(dá)式驗(yàn)證:
1、輸入的數(shù)字為5時(shí),程序打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T1 {
public static void main(String[] args) {
System.out.println("請(qǐng)輸入一個(gè)數(shù)字");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = "5";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
}
}


2、輸入的字符串是bo,boo,booo...打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T2 {
public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入bo,boo,booo...之類的字符串");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次
String old = "^boo*";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
}}}



3、輸入的字符串是k,ko,koo,kooo...打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T3 {
public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入k,ko,koo,kooo...之類的字符串");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次
String old = "^ko*";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}



4、輸入的字符串是p,po時(shí)打印出true

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T4 {
public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入p或po的字符串");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0
String old = "^po?";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}


5、輸入的字符串以ba開頭時(shí),打印出true。例如:輸入banana會(huì)打印true,但是輸入unba會(huì)打印false。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T5 {
public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串以ba開頭時(shí),打印出true。"
+ "\n例如:輸入banana會(huì)打印true,"
+ "\n但是輸入unba會(huì)打印false。");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0
//.可以替換任意的除了\n(換行符)以外的任意字符
//*表示字符出現(xiàn)的次數(shù)是任意多次
String old = "^ba.*";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}

自己的發(fā)現(xiàn)的規(guī)律和理解總結(jié)記錄:



6、輸入的字符串以er結(jié)尾時(shí),打印出true。worker,erlly

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T6 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串以er結(jié)尾時(shí),打印出true");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0
//.可以替換任意的除了\n(換行符)以外的任意字符
//*表示字符出現(xiàn)的次數(shù)是任意多次
//$表示輸入的字符串必須以什么結(jié)尾
String old = ".*er$";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}


7、固定電話號(hào)碼驗(yàn)證:0731-8xxxxxxx
區(qū)號(hào)必須是一個(gè)四位數(shù)字
區(qū)號(hào)和電話號(hào)碼之間必須使用-連接
電話號(hào)碼是一個(gè)8位數(shù)字
長(zhǎng)沙的號(hào)碼首位都是8開頭


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T7 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串"
+ "固定電話號(hào)碼驗(yàn)證是否為0731-8xxxxxxx類型。\n"
+ "區(qū)號(hào)必須是一個(gè)四位數(shù)字\n"
+ "區(qū)號(hào)和電話號(hào)碼之間必須使用-連接\n"
+ "電話號(hào)碼是一個(gè)8位數(shù)字\n"
+ "長(zhǎng)沙的號(hào)碼首位都是8開頭");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次。
//$表示輸入的字符串必須以什么結(jié)尾。
//\d表示匹配任意數(shù)字字符,相當(dāng)于“[0-9]”。
//"{}"表示匹配前一個(gè)字符或子表達(dá)式n次。
//個(gè)人的理解:
//在字符串中表示\本身必須使用轉(zhuǎn)移符號(hào)\,比如用\d等時(shí)要用成\\d
//“\\”表示被“\”這個(gè)轉(zhuǎn)義字符轉(zhuǎn)義后的“\”,代表是純“\”
//而非字符串“\”。
String old = "^\\d{4}-{1}8\\d{7}";
//String old = "\\d{4}";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("符合xxxx-8xxxxxxx類型要求!");
}
else{
System.out.println("不符合xxxx-8xxxxxxx類型要求!");
}
}}}




8、手機(jī)號(hào)碼驗(yàn)證:
首位必須是1,第二位只能是3,4,5,6,7,8,9,0,后面跟9位數(shù)字。


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T8 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串\n"
+ "首位必須是1,\n"
+ "第二位只能是3,4,5,6,7,8,9,0,\n"
+ "后面跟9位數(shù)字。");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次。
//$表示輸入的字符串必須以什么結(jié)尾。
//\d表示匹配任意數(shù)字字符,相當(dāng)于“[0-9]”。
//"{}"表示匹配前一個(gè)字符或子表達(dá)式n次。
//個(gè)人的理解:
//在字符串中表示\本身必須使用轉(zhuǎn)移符號(hào)\,比如用\d等時(shí)要用成\\d
//“\\”表示被“\”這個(gè)轉(zhuǎn)義字符轉(zhuǎn)義后的“\”,代表是純“\”
//而非字符串“\”。
//輸入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//個(gè)人的理解和總結(jié):"|"表示"或者"
String old = "^1(0|[3-9])\\d{9}";
//String old = "\\d{4}";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("符合要求!");
}
else{
System.out.println("不符合要求!");
}
}}}


依次控制單一變量地驗(yàn)正自己寫的正則表達(dá)式是否正確等:

9、輸入的字符串是一個(gè)合法的變量名。


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T9 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串是一個(gè)合法的變量名");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次。
//$表示輸入的字符串必須以什么結(jié)尾。
//\d表示匹配任意數(shù)字字符,相當(dāng)于“[0-9]”。
//"{}"表示匹配前一個(gè)字符或子表達(dá)式n次。
//個(gè)人的理解:
//在字符串中表示\本身必須使用轉(zhuǎn)移符號(hào)\,比如用\d等時(shí)要用成\\d
//“\\”表示被“\”這個(gè)轉(zhuǎn)義字符轉(zhuǎn)義后的“\”,代表是純“\”
//而非字符串“\”。
//輸入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//個(gè)人的理解和總結(jié):"|"表示"或者"。
//在JS中可以寫成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"轉(zhuǎn)義字符,而且不必用“/”括起來(lái)
//個(gè)人的理解:\\$用了兩次的轉(zhuǎn)義,第一次時(shí)第一個(gè)“\”把
//第二個(gè)“\”轉(zhuǎn)義為純的字符串“\”,
//之后純的字符串“\”把$轉(zhuǎn)義為純的字符串“$”
String old = "^[a-z|A-Z|\\$|_][a-z|A-Z|\\d|_]*$";
//或簡(jiǎn)寫成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具體直觀和簡(jiǎn)寫的寫法我都嘗試過,效果都一樣。
//"|"表示"或者"
//String old = "\\d{4}";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是一個(gè)合法的變量名!");
}
else{
System.out.println("不是一個(gè)合法的變量名!");
}
}}}



10、嘗試寫出郵箱驗(yàn)證的正則表達(dá)式。
要求一:必須包含一個(gè)@和.
要求二:@必須在.前面
要求三:@前面必須要有字母數(shù)字下劃線
要求四:@和.之間需要有字母數(shù)字下劃線
要求五:.后面必須跟上com或者net,cn
rr@163.com

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T10 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串是一個(gè)郵箱!\n"
+ "要求一:必須包含一個(gè)@和.\n"
+ "要求二:@必須在.前面\n"
+ "要求三:@前面必須要有字母數(shù)字下劃線\n"
+ "要求四:@和.之間需要有字母數(shù)字下劃線\n"
+ "要求五:.后面必須跟上com或者net,cn\n");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次。
//$表示輸入的字符串必須以什么結(jié)尾。
//\d表示匹配任意數(shù)字字符,相當(dāng)于“[0-9]”。
//"{n}"表示匹配前一個(gè)字符或子表達(dá)式n次。
//"{n,}"表示匹配前一個(gè)字符或子表達(dá)式n次以上。
//個(gè)人的理解:
//在字符串中表示\本身必須使用轉(zhuǎn)移符號(hào)\,比如用\d等時(shí)要用成\\d
//“\\”表示被“\”這個(gè)轉(zhuǎn)義字符轉(zhuǎn)義后的“\”,代表是純“\”
//而非字符串“\”。
//輸入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//個(gè)人的理解和總結(jié):"|"表示"或者"。
//在JS中可以寫成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"轉(zhuǎn)義字符,而且不必用“/”括起來(lái)
//個(gè)人的理解:\\$用了兩次的轉(zhuǎn)義,第一次時(shí)第一個(gè)“\”把
//第二個(gè)“\”轉(zhuǎn)義為純的字符串“\”,
//之后純的字符串“\”把$轉(zhuǎn)義為純的字符串“$”,\\.也同理
String old = "[a-zA-Z\\d_]{1,}@[a-zA-Z\\d_]{1,}"
+ "\\.*(com|net|cn)$";
//或簡(jiǎn)寫成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具體直觀和簡(jiǎn)寫的寫法我都嘗試過,效果都一樣。
//"|"表示"或者"。
//輸入的字符串必須是5個(gè)以上的h
// String reg12 = "h{5,}";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是一個(gè)郵箱!");
}
else{
System.out.println("不是一個(gè)郵箱!");
}
}}}




11、輸入的是空白字符,例如空格\s,換行\(zhòng)n、制表符時(shí)\t,打印出true。(兩種方法)
自己想出的方法一:


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T11 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串是空白字符,\n"
+ "例如空格\\s,換行\(zhòng)\n、\n"
+ "制表符時(shí)\\t,打印出true。\n"
+ "\\f——表示換頁(yè)符\n"
+ "\\r——表示回車符\n"
+ "\\n——表示換行符\n"
+ "\\t——水平制表符\n"
+ "\\v——垂直制表符");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次。
//$表示輸入的字符串必須以什么結(jié)尾。
//\d表示匹配任意數(shù)字字符,相當(dāng)于“[0-9]”。
//"{n}"表示匹配前一個(gè)字符或子表達(dá)式n次。
//"{n,}"表示匹配前一個(gè)字符或子表達(dá)式n次以上。
//個(gè)人的理解:
//在字符串中表示\本身必須使用轉(zhuǎn)移符號(hào)\,比如用\d等時(shí)要用成\\d
//“\\”表示被“\”這個(gè)轉(zhuǎn)義字符轉(zhuǎn)義后的“\”,代表是純“\”
//而非字符串“\”。
//輸入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//個(gè)人的理解和總結(jié):"|"表示"或者"。
//在JS中可以寫成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"轉(zhuǎn)義字符,而且不必用“/”括起來(lái)
//個(gè)人的理解:\\$用了兩次的轉(zhuǎn)義,第一次時(shí)第一個(gè)“\”把
//第二個(gè)“\”轉(zhuǎn)義為純的字符串“\”,
//之后純的字符串“\”把$轉(zhuǎn)義為純的字符串“$”,\\.也同理
String old = "(\\\\s|\\\\n|\\\\t|\\\\f|\\\\v|\\\\r)";
//或簡(jiǎn)寫成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具體直觀和簡(jiǎn)寫的寫法我都嘗試過,效果都一樣。
//"|"表示"或者"。
//輸入的字符串必須是5個(gè)以上的h
// String reg12 = "h{5,}";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是空白字符!");
}
else{
System.out.println("不是空白字符!");
}
}}}



自己想出的方法二:

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T11 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串是空白字符,\n"
+ "例如空格\\s,換行\(zhòng)\n、\n"
+ "制表符時(shí)\\t,打印出true。\n"
+ "\\f——表示換頁(yè)符\n"
+ "\\r——表示回車符\n"
+ "\\n——表示換行符\n"
+ "\\t——水平制表符\n"
+ "\\v——垂直制表符");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注釋,下面的內(nèi)容等是自己總結(jié)的相關(guān)知識(shí)(有助與記憶,理解等):
//^表示輸入的字符串必須以什么開頭。
//?表示字符出現(xiàn)的次數(shù)是1或者0。
//.可以替換任意的除了\n(換行符)以外的任意字符。
//*表示字符出現(xiàn)的次數(shù)是任意多次。
//$表示輸入的字符串必須以什么結(jié)尾。
//\d表示匹配任意數(shù)字字符,相當(dāng)于“[0-9]”。
//"{n}"表示匹配前一個(gè)字符或子表達(dá)式n次。
//"{n,}"表示匹配前一個(gè)字符或子表達(dá)式n次以上。
//個(gè)人的理解:
//在字符串中表示\本身必須使用轉(zhuǎn)移符號(hào)\,比如用\d等時(shí)要用成\\d
//“\\”表示被“\”這個(gè)轉(zhuǎn)義字符轉(zhuǎn)義后的“\”,代表是純“\”
//而非字符串“\”。
//輸入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//個(gè)人的理解和總結(jié):"|"表示"或者"。
//在JS中可以寫成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"轉(zhuǎn)義字符,而且不必用“/”括起來(lái)
//個(gè)人的理解:\\$用了兩次的轉(zhuǎn)義,第一次時(shí)第一個(gè)“\”把
//第二個(gè)“\”轉(zhuǎn)義為純的字符串“\”,
//之后純的字符串“\”把$轉(zhuǎn)義為純的字符串“$”,\\.也同理
//方法一:
//String old = "(\\\\s|\\\\n|\\\\t|\\\\f|\\\\v|\\\\r)";
//方法二:
String old = "^\\\\[s|n|t|f|v|r]";
//方法三:
//String old = "\\\\[s|n|t|f|v|r]";
//或簡(jiǎn)寫成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具體直觀和簡(jiǎn)寫的寫法我都嘗試過,效果都一樣。
//"|"表示"或者"。
//輸入的字符串必須是5個(gè)以上的h
// String reg12 = "h{5,}";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是空白字符!");
}
else{
System.out.println("不是空白字符!");
}
}}}



12、輸入的不是空白字符時(shí),打印出true。


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T12 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串不是空白字符,\n"
+ "例如空格\\s,換行\(zhòng)\n、\n"
+ "制表符時(shí)\\t,打印出true。\n"
+ "\\f——表示換頁(yè)符\n"
+ "\\r——表示回車符\n"
+ "\\n——表示換行符\n"
+ "\\t——水平制表符\n"
+ "\\v——垂直制表符");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = "\\\\[s|n|t|f|v|r]";
Boolean B = Pattern.matches(old, Scanner);
if(B==true){
B=false;}
else{B=true;}
System.out.println(B);
}}}


13、輸入的字符串中包含連續(xù)的兩個(gè)p時(shí),打印出true。(apple,pplv,app)

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T13 {public static void main(String[] args) {
while(true){
System.out.println("請(qǐng)輸入的字符串中包含連續(xù)的兩個(gè)p時(shí),\n"
+ "打印出true。(apple,pplv,app)");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = ".{0,}p{2}.{0,}";
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}



14、輸入的字符串包含連續(xù)的五個(gè)或五個(gè)以上K時(shí),打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T14 {public static void main(String[] args) {
while(true){
System.out.println("輸入的字符串包含連續(xù)的\n"
+ "五個(gè)或五個(gè)以上K時(shí),打印出true。");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = ".{0,}K{5,}.{0,}";
//用Pattern.matches判斷輸入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}


正則表達(dá)式PPT:








老師寫的代碼和筆記等:
package Z;
import java.util.regex.Pattern;
public class Z {
public static void main(String[] args) {
// TODO Auto-generated method stub
//輸入一個(gè)字符串,a或者""
//String inp = "www.com";
//正則表達(dá)式
//?表示字符出現(xiàn)的次數(shù)是1或者0
//*表示字符出現(xiàn)的次數(shù)是任意多次
//+表示字符出現(xiàn)的次數(shù)是1或者多次
//String reg1 = "a+";
//判斷輸入的字符串是否符合要求
//Boolean r1 = Pattern.matches(reg1, inp);
//System.out.println(r1);
//^表示輸入的字符串必須以什么開頭
//.可以替換任意的除了\n(換行符)以外的任意字符
//String reg2 = "^pub.*";
//Boolean r2 = Pattern.matches(reg2, inp);
//System.out.println(r2);
//$表示輸入的字符串必須以什么結(jié)尾
//String reg3 = ".*com$";
//Boolean r3 = Pattern.matches(reg3, inp);
//System.out.println(r3);
//輸入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//Boolean r4 = Pattern.matches(reg4, inp);
//System.out.println(r4);
//輸入的字符串必須以www開頭,必須以com或者net結(jié)尾,
//中間可以是任意多個(gè)字符
//String reg5 = "^www.*(com|net)$";
//Boolean r5 = Pattern.matches(reg5, inp);
//System.out.println(r5);
//輸入的字符串必須全部是字母
//String reg6 = "[a-zA-Z]+";
//Boolean r6 = Pattern.matches(reg6, "Apple");
//System.out.println(r6);
//輸入的字符串必須全部是數(shù)字
//String reg7 = "[0-9]+";
//也可以使用元字符來(lái)表示
//在字符串中表示\本身必須使用轉(zhuǎn)移符號(hào)\
// String reg7 = "\\d+";
// Boolean r7 = Pattern.matches(reg7, "419.1");
// System.out.println(r7);
//輸入的字符串必須是數(shù)字字母
//String reg8 = "[0-9a-zA-Z]";
//\w表示數(shù)字字母下劃線
//變量名必須以數(shù)字,字母,下劃線中的組成,不能以數(shù)字開頭
//String reg9 = "^[a-zA-Z_]\\w*";
//Boolean r9 = Pattern.matches(reg9, "_user");
//System.out.println(r9);
//輸入的字符串必須是四個(gè)連續(xù)的a
//String reg10 = "a{4}";
//Boolean r10 = Pattern.matches(reg10, "aaaa");
//System.out.println(r10);
//輸入的字符串必須是3到7個(gè)c
//String reg11 = "c{3,7}";
//Boolean r11 = Pattern.matches(reg11, "cccc");
//System.out.println(r11);
//輸入的字符串必須是5個(gè)以上的h
String reg12 = "h{5,}";
//輸入的必須是一個(gè)手機(jī)號(hào)碼,必須以1開頭,是11位數(shù)字
String reg13 = "^1\\d{10}";
//輸入的字符串必須是一個(gè)0.xx的兩位小數(shù)
String reg14 = "^0\\.\\d{2}";
Boolean r14 = Pattern.matches(reg14, "0.31");
System.out.println(r14);
//輸入的字符串必須以除了a以外的任何字符開頭
String reg15 = "^[^a][a-z]*";
}
}
學(xué)習(xí)筆記:
正則表達(dá)式
JS和JAVA等多種語(yǔ)言中都可以使用正則表達(dá)式,而且語(yǔ)法規(guī)則都一樣。
正則表達(dá)式中的特殊字符:
?:表示出現(xiàn)的次數(shù)是1或者0
+:出現(xiàn)的次數(shù)不能為0
*:可以出現(xiàn)任意多次
^:以什么開頭
$:以什么結(jié)尾
.:表示換行符\n以外的任何字符
正則表達(dá)式中的元字符:
所謂元字符就是指那些在正則表達(dá)式中具有特殊意義的專用字符,其使得正則表達(dá)式具有強(qiáng)大的文字處理能力。
基本元字符:
"." ——表示匹配除換行符和回車符外的任意單個(gè)字符
"|"?——表示邏輯“或”
"[]" ——表示匹配字符集合中的一個(gè)字符
"[^]"——表示匹配不在字符集合中的一個(gè)字符,即對(duì)集合取非
"-"——表示定義一個(gè)區(qū)間,如a-z即代表小寫字母a-z
"()"——表示生成子表達(dá)式
"\"——表示對(duì)下一個(gè)字符進(jìn)行轉(zhuǎn)義,轉(zhuǎn)義即理解為取消其特殊含義
特殊元字符
\d——匹配任意數(shù)字字符,相當(dāng)于“[0-9]”
\D——“\d”的反義,匹配任意非數(shù)字字符,相當(dāng)于“[^0-9]”
\w——匹配任一字母、數(shù)字、下劃線,在 Unicode 編碼中也可匹配漢字、俄文等字符
\W——“\w”的反義,包括空白字符、標(biāo)點(diǎn)等
\s——匹配一個(gè)空白字符,包括空格、水平制表符、換行符、回車符等
\S——“\s”的反義,匹配任意非空白字符
數(shù)量元字符
"*"——匹配前一個(gè)字符或子表達(dá)式任意次重復(fù),可以匹配零次
"+"——匹配前一個(gè)字符或子表達(dá)式一次或多次重復(fù),與"*"的唯一區(qū)別在于不能匹配零次
"?"——匹配前一個(gè)字符或子表達(dá)式零次或一次
"{}"——匹配前一個(gè)字符或子表達(dá)式n次
"{m,n}"——匹配前一個(gè)字符或子表達(dá)式至少m次至多n次
"{n,}"——匹配前一個(gè)字符n次或更多次
空白元字符
\f——表示換頁(yè)符
\r——表示回車符
\n——表示換行符
\t——水平制表符
\v——垂直制表符
好文鏈接:


http://mp.weixin.qq.com/s?__biz=MzIyOTU3NjM3NA==&mid=2247483950&idx=1&sn=82d0c853405386ce8930cfdec2a1c3c3&chksm=e841d9f7df3650e1acfb71639c22701d3c2a860f818d0310907aa618b97b7b6ef85ea6879bc8&scene=21#wechat_redirect

https://www.runoob.com/regexp/regexp-metachar.html
正則表達(dá)式大全:
字符 描述?
\ 將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè)向后引用、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,“n”匹配字符“n”?!癨n”匹配一個(gè)換行符。序列“\\”匹配“\”而“\(”則匹配“(”。?
^ 匹配輸入字符串的開始位置。如果設(shè)置了RegExp對(duì)象的Multiline屬性,^也匹配“\n”或“\r”之后的位置。?
$ 匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp對(duì)象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。?
* 匹配前面的子表達(dá)式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等價(jià)于{0,}。?
+ 匹配前面的子表達(dá)式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價(jià)于{1,}。?
? 匹配前面的子表達(dá)式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等價(jià)于{0,1}。?
{n} n是一個(gè)非負(fù)整數(shù)。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個(gè)o。?
{n,} n是一個(gè)非負(fù)整數(shù)。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o?!皁{1,}”等價(jià)于“o+”?!皁{0,}”則等價(jià)于“o*”。?
{n,m} m和n均為非負(fù)整數(shù),其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個(gè)o?!皁{0,1}”等價(jià)于“o?”。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。?
? 當(dāng)該字符緊跟在任何一個(gè)其他限制符(*,+,?,{n},{n,},{n,m})后面時(shí),匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對(duì)于字符串“oooo”,“o+?”將匹配單個(gè)“o”,而“o+”將匹配所有“o”。?
. 匹配除“\n”之外的任何單個(gè)字符。要匹配包括“\n”在內(nèi)的任何字符,請(qǐng)使用像“[.\n]”的模式。?
(pattern) 匹配pattern并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號(hào)字符,請(qǐng)使用“\(”或“\)”。?
(?:pattern) 匹配pattern但不獲取匹配結(jié)果,也就是說這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用或字符“(|)”來(lái)組合一個(gè)模式的各個(gè)部分是很有用。例如“industr(?:y|ies)”就是一個(gè)比“industry|industries”更簡(jiǎn)略的表達(dá)式。?
(?=pattern) 正向預(yù)查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始。?
(?!pattern) 負(fù)向預(yù)查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始?
x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”?!?z|f)ood”則匹配“zood”或“food”。?
[xyz] 字符集合。匹配所包含的任意一個(gè)字符。例如,“[abc]”可以匹配“plain”中的“a”。?
[^xyz] 負(fù)值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。?
[a-z] 字符范圍。匹配指定范圍內(nèi)的任意字符。例如,“[a-z]”可以匹配“a”到“z”范圍內(nèi)的任意小寫字母字符。?
[^a-z] 負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范圍內(nèi)的任意字符。?
\b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。?
\B 匹配非單詞邊界?!癳r\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。?
\cx 匹配由x指明的控制字符。例如,\cM匹配一個(gè)Control-M或回車符。x的值必須為A-Z或a-z之一。否則,將c視為一個(gè)原義的“c”字符。?
\d 匹配一個(gè)數(shù)字字符。等價(jià)于[0-9]。?
\D 匹配一個(gè)非數(shù)字字符。等價(jià)于[^0-9]。?
\f 匹配一個(gè)換頁(yè)符。等價(jià)于\x0c和\cL。?
\n 匹配一個(gè)換行符。等價(jià)于\x0a和\cJ。?
\r 匹配一個(gè)回車符。等價(jià)于\x0d和\cM。?
\s 匹配任何空白字符,包括空格、制表符、換頁(yè)符等等。等價(jià)于[\f\n\r\t\v]。?
\S 匹配任何非空白字符。等價(jià)于[^\f\n\r\t\v]。?
\t 匹配一個(gè)制表符。等價(jià)于\x09和\cI。?
\v 匹配一個(gè)垂直制表符。等價(jià)于\x0b和\cK。?
\w 匹配包括下劃線的任何單詞字符。等價(jià)于“[A-Za-z0-9_]”。?
\W 匹配任何非單詞字符。等價(jià)于“[^A-Za-z0-9_]”。?
\xn 匹配n,其中n為十六進(jìn)制轉(zhuǎn)義值。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長(zhǎng)。例如,“\x41”匹配“A”?!癨x041”則等價(jià)于“\x04&1”。正則表達(dá)式中可以使用ASCII編碼。.?
\num 匹配num,其中num是一個(gè)正整數(shù)。對(duì)所獲取的匹配的引用。例如,“(.)\1”匹配兩個(gè)連續(xù)的相同字符。?
\n 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果\n之前至少n個(gè)獲取的子表達(dá)式,則n為向后引用。否則,如果n為八進(jìn)制數(shù)字(0-7),則n為一個(gè)八進(jìn)制轉(zhuǎn)義值。?
\nm 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果\nm之前至少有nm個(gè)獲得子表達(dá)式,則nm為向后引用。如果\nm之前至少有n個(gè)獲取,則n為一個(gè)后跟文字m的向后引用。如果前面的條件都不滿足,若n和m均為八進(jìn)制數(shù)字(0-7),則\nm將匹配八進(jìn)制轉(zhuǎn)義值nm。?
\nml 如果n為八進(jìn)制數(shù)字(0-3),且m和l均為八進(jìn)制數(shù)字(0-7),則匹配八進(jìn)制轉(zhuǎn)義值nml。?
\un 匹配n,其中n是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的Unicode字符。例如,\u00A9匹配版權(quán)符號(hào)(?)。