------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------
1 概述
正則表達式:正則表達式用於操作字符串數據。通過一些特定的符號來體現的。所以我們爲了掌握正則表達式,必須要學習一些符號。雖然簡化了,但是閱讀性差。
需求:定義一個功能對QQ號進行校驗。
要求:長度5~15. 只能是數字, 0不能開頭
不用正則表達式的做法:
public class RegexDemo {
public static void main(String[] args) {
String qq = "123k4567";
checkQQ(qq);
}
public static void checkQQ(String qq){
int len = qq.length();
if(len>=5 && len<=15){
if(!qq.startsWith("0")){
try {
long l = Long.parseLong(qq);
System.out.println(l+":正確");
}catch(NumberFormatException e){
System.out.println(qq+":含有非法字符");
}
}else{
System.out.println(qq+":不能0開頭");
}
}else{
System.out.println(qq+":長度錯誤");
}
}
}
正則表達式的做法:
public class RegexDemo {
public static void main(String[] args) {
String qq = "123k4567";
String regex = "[1-9][0-9]{4,14}";//正則表達式。
boolean b = qq.matches(regex);//String類中的方法,接受的必須是具備某種規則的字符串就是正則表達式,如果qq這個字符串與regex這個正則表達式匹配返回true
System.out.println(qq+":"+b);
}
}
2 正則表達式對字符串的常見操作-獲取
將正則規則進行對象的封裝。Pattern p = Pattern.compile("a*b");
通過正則對象的matcher方法字符串相關聯。獲取要對字符串操作的匹配器對象Matcher .Matcher m = p.matcher("aaaaab");
通過Matcher匹配器對象的方法對字符串進行操作。boolean b = m.matches();
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo {
public static void main(String[] args) {
functionDemo();
}
public static void functionDemo() {
String str = "da jia hao,ming tian bu fang jia!";
String regex = "\\b[a-z]{3}\\b";
//1,將正則封裝成對象。
Pattern p = Pattern.compile(regex);
//2, 通過正則對象獲取匹配器對象。
Matcher m = p.matcher(str);
//使用Matcher對象的方法對字符串進行操作。
//既然要獲取三個字母組成的單詞
//查找。 find();
System.out.println(str);
while(m.find()){
System.out.println(m.group());//獲取匹配的子序列
System.out.println(m.start()+":"+m.end());
}
}
3 正則表達式對字符串的常見操作-切割
其實使用的就是String類中的split方法。
public class Test {
public static void main(String[] args) {
functionDemo();
}
public static void functionDemo() {
String str = "zhangsan xiao zhaoliu";
String[] names = str.split(" ");//用空格來切時候,如果有很多空格,切出來的效果就不好了
for(String name : names){
System.out.println(name);
}
}
}
public class Test {
public static void main(String[] args) {
functionDemo();
}
public static void functionDemo() {
String str = "zhangsan xiaoqiang zhaoliu";
String[] names = str.split(" +");//表示多個空格
for(String name : names){
System.out.println(name);
}
}
}
public class Test {
public static void main(String[] args) {
functionDemo();
}
public static void functionDemo() {
String str = "zhangsan.xiaoqiang.zhaoliu";
String[] names = str.split("\\.");
for(String name : names){
System.out.println(name);
}
}
}
組:((A)(B(C)))public class Test {
public static void main(String[] args) {
functionDemo();
}
public static void functionDemo() {
String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
String[] names = str.split("(.)\\1+");//加上括號進行封裝,有編號
for(String name : names){
System.out.println(name);
}
}
}
4 正則表達式對字符串的常見操作-替換
其實使用的就是String類中的replaceAll()方法。
public class RegexDemo {
public static void main(String[] args) {
functionDemo();
}
public static void functionDemo() {
String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
str = str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
String tel = "15800001111";//158****1111;
tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(tel);
}
}
5 正則表達式對字符串的常見操作_匹配
其實使用的就是String類中的matches方法。public class RegexDemo {
public static void main(String[] args) {
functionDemo();
}
//演示匹配:匹配手機號碼是否正確。
public static void functionDemo(){
String tel = "15800001111";
//String regex = "1[358][0-9]{9}";
String regex = "1[358]\\d{9}";//用到反斜線的時候要用到兩個,因爲只用一個的話會把d給轉義了
boolean b = tel.matches(regex);
System.out.println(tel+":"+b);
}
}
6 練習
1.對ip地址排序:192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55
public class RegexTest {
public static void main(String[] args) {
test();
}
public static void test(){
String ip_str = "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55 225.234.234.255";
//1,爲了讓ip可以按照字符串順序比較,只要讓ip的每一段的位數相同。
//所以,補零,按照每一位所需做多0進行補充。每一段都加兩個0.
ip_str = ip_str.replaceAll("(\\d+)", "00$1");
System.out.println(ip_str);
//然後每一段保留數字3位。
ip_str = ip_str.replaceAll("0*(\\d{3})", "$1");
System.out.println(ip_str);
//將ip地址切出。
String[] ips = ip_str.split(" +");
TreeSet<String> ts = new TreeSet<String>();
for(String ip : ips){
// System.out.println(ip);
ts.add(ip);
}
for(String ip : ts){
System.out.println(ip.replaceAll("0*(\\d+)", "$1"));
}
}
}
2.對郵件地址校驗
public class RegexTest {
public static void main(String[] args) {
test();
}
public static void test() {
String mail = "[email protected]";
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{1,3})+";
regex = "\\w+@\\w+(\\.\\w+)+";//[email protected]
boolean b = mail.matches(regex);
System.out.println(mail+":"+b);
}
}