java正则表达式结尾_java 正则表达式
一、正則表達式的轉義字符\(特殊的兩個反斜杠,你鬧心不!)
java中正則表達式要有兩個\\,才能達到轉義。我寫的這個命令是查找以http|ftp|https|file://開頭,或是../..開頭,或是../開頭的所有字符,
正確是這樣的((^(http|ftp|https|file)(://))|^(\\.\\./\\.\\./)|^(\\.\\./)).*
^(XXX)是表示以XXX開頭的字符串。
正則表達式中表示數字是“\d”,實際在內存中就是兩個字符\和d, 但在java中\就得寫成\\,因此在寫程序時就是\\d。
正則表達式一個\表示轉義字符,與后面的字符共同組成一個字符集表示項,如\d表示數字。而要輸出一個\,就需要兩個,將\自身轉義為普通字符。
而輸出成“\\”,實際在內存中就是兩個字符“\和\”,java中就要分別表示這兩個\,每個都必須寫成"\\",因此要寫成"\\\\"。實際上先要將"\\\\"轉換成一個字符串"\\"再交給正則表達式,正則表達式轉義一次就剛好匹配一個"\"。
(java中的存在的轉義序列值為“\b、\t、\n、\f、\r、\"、\'、\\”)
(正則表達式中的元字符:“(、[、{、\、^、-、$、|、}、]、)、?、+、*、+、.”)
(變態的不包含[^XXX])
[^0-9a-z] 條件限制在非小寫0 to 9或a to z范圍中一個字符
[^0-9[a-z]] 條件限制在非小寫0 to 9或a to z范圍中一個字符(交集)
我做了一個測試:[0-9a-z]和[0-9[a-z]]是一個樣的,而[^0-9a-z]與[^0-9[a-z]]不同
先說一下[0-9a-z]和[0-9[a-z]]這兩個正則表達式的效果是一樣的,
String regEx = "[0-9[a-z]]";
//???????String regEx = "[0-9a-z]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
if (m.matches())
System.out.println("true");
else
System.out.println("incorrect");
測試字符效果都是一樣的。
但是[^0-9a-z] 和[^0-9[a-z]]兩個是不同的。
[^0-9a-z]表的是0到9或是a到z的字符都是不要的,而[^0-9[a-z]]測試結果顯示,0到9的字符是incorrect,但a到z卻是true。
可以看出兩個是有區別的。
這個博主講到很好:http://www.cnblogs.com/kkcheng/archive/2010/02/03/1662821.html
原理性的東西,講的全面細致:
這篇實用性較強,尤其是group,split,replaceall,append,replacement,start,end等函數的使用,注意,后面講的非常詳細:
二、細說正則^和$(開頭和結尾)
正則表達式中,^表示作為開頭,$表示結尾。
如匹配以bao開頭的字符串為"^bao(.*)";而"(.*)bao$"匹配以bao結尾。
但要注意,二者單獨使用是全文匹配。
^bao匹配bao開頭的字符串,但正則表達式"^bao"只能匹配字符串bao,而其他字符串baotou、baoqingtian都匹配不了。
如果要匹配bao開頭字符串baoXXX…,要用
Stringregex = "^bao";
if("baotou".matches(regex)) {
System.out.println("全文匹配1");
}
Stringall_regex = "^baotou";
if("baotou".matches(all_regex)) {
System.out.println("全文匹配2");
}
輸出為:全文匹配2。可見只能全文匹配。$結尾標示符也一樣,單獨用全文匹配。所以"baotou"和"^baotou$"、"baotou$"以及"^baotou"這個四個效果一樣,都是全文匹配。
另外,"^$"和"^"會匹配空字符"",
給出一個綜合的例子
publicstatic void main(String[] args) {
String[]filename = { "baotou", "shanghai", "beijing","shenzhen" };
Stringregex = "^bao";
if(filename[0].matches(regex)) {
System.out.println("全文匹配1");
}
Stringall_regex = "^bao(.*)";
if(filename[0].matches(all_regex)) {
System.out.println("全文匹配2");
}
Stringteststring = "ttbaotou";
Stringregex2 = "(.*)bao(.*)";
if(teststring.matches(regex2)) {
System.out.println("匹配開頭1");
}
Stringregex3 = "(.*)^bao(.*)";
if(teststring.matches(regex3)) {
System.out.println("匹配開頭2");
}
Stringregex4 = "(.*)^bao(.*)";
if("baotou".matches(regex4)) {
System.out.println("匹配開頭3");
}
String regex5 = "(.*)bao(.*)";
if("baotou".matches(regex4)) {
System.out.println("匹配開頭4");
}
}
輸出為:
全文匹配2
匹配開頭1
匹配開頭3
匹配開頭4
從例子中可以看出"^bao(.*)"匹配開頭,"bao(.*)$"匹配結尾;
"(.*)^bao(.*)"其實違法,但可以用,和"^bao(.*)"一樣。$有類型功能。
三、正則表達式的使用方法
從上例子中可以看到正則表達式使用方法:
1用Pattern類的complie加載正則表達式StringregEx;
2用Pattern類的Matcher函數加載要匹配的目標字符串;
3返回的Matcher m執行m.matches()進行實際匹配,匹配上返回真,否則假。
代碼:
String regEx ="^(\\.\\./\\.\\.).*";
Pattern p =Pattern.compile(regEx);
Matcher m =p.matcher("http://,sdkjf,adfa,jjo,lo");
if (m.matches())
System.out.println("true");
Else
System.out.println("incorrect");
而String類自身就有字符串匹配函數matches,如"baotou".matches("(.*)bao(.*)"),可以直接使用,來驗證自身匹配一個正則表達式。
String all_regex = "^bao(.*)";
if ("baotou".matches(all_regex)) {
System.out.println("全文匹配2");
}
另外,String類可以直接用兩個函數startsWith()和endsWith()檢驗字符串開頭和結尾
"baotou".endsWith(suffix);
"baotou".startsWith(prefix);
而"baotou".equals(anObject);用來驗證相等。
總結
以上是生活随笔為你收集整理的java正则表达式结尾_java 正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java移位运算_Java 移位运算符
- 下一篇: 最优秀的一到五个国产软件