JAVA 제6 5 과 정규 표현 식 학습

16444 단어
정규 표현 식: 작업 문자열 에 주로 사용 되 며 특정한 기 호 를 통 해 나타 납 니 다.
예:
QQ 번호 검사
6 ~ 9 자리, 0 은 시작 할 수 없고 숫자 여야 합 니 다.
String 클래스 에 matches 방법 이 있 습 니 다.matches(String regex) 이 문자열 이 주어진 정규 표현 식 과 일치 하 는 지 알려 줍 니 다.regex,
public static void checkQQ() {
		
		//      1-9,      0-9,               5 8 
		String regex = "[1-9][0-9]{5,8}";//     
		String qq = "123459";
		boolean flag = qq.matches(regex);
		System.out.println(qq+" : "+flag);
	}

PS: ,

. ( )
\d :[0-9]
\D : [^0-9]
\s :[ \t
\x0B\f\r]
\S :[^\s]
\w :[a-zA-Z_0-9]
\W :[^\w]
[abc] a、b c( )
[^abc] , a、b c( )
[a-zA-Z] a z A Z, ( )
[a-d[m-p]] a d m p:[a-dm-p]( )
[a-z&&[def]] d、e f( )
[a-z&&[^bc]] a z, b c:[ad-z]( )
[a-z&&[^m-p]] a z, m p:[a-lq-z]( )

^
$
\b
\B
\A
\G
\Z , ( )
\z

Greedy
X? X
X* X
X+ X
X{n} Xn
X{n,} Xn
X{n,m} Xnm

Logical
XY X Y
X|Y X Y
(X) X,

Back
\n nth

public static void check() {
<span style="white-space:pre">		</span>
     String string = "aoooooz";
     String regex = "ao{4,}z";//     
     boolean flag = string.matches(regex);
     System.out.println(string+" : "+flag);
}

1. 2. 3. 4.

: String matches

	public static void check() {
		
		//          
		String tel = "18753377511";
		//    1,    3 5 8
		//String regex = "1[358][0-9]{9}";
		String regex = "1[358]\\d{9}";
		//    \,    ,       "\" "\"  
		boolean flag = tel.matches(regex);
		System.out.println(tel+" : "+flag);
	}


: String split(String regex) , " ", ,

public static void check() {
		//      ,  ,        
		String str = "a   b  c     d e f";
		String regex = " +";//    1     
		String[] line = str.split(regex);
		for(String i : line){
			System.out.println(i);
		}
	}
,PS:
String str = "a.b.c.d.e..f";
		String regex = "\\.+";//\.     .,      \
		String[] line = str.split(regex);

()

,. ,(.) ,(.)\\1,

String str = "a@@@b####c...dtttef";
		String regex = "(.)\\1+";//
		String[] line = str.split(regex);

((A)(B(C))), ,

((A)(B(C))) 1

(A)    2

(B(C))     3

(C)         4

0


replaceAll(String regex,String replacement) 주어진 replacement 을 사용 하여 주어진 정규 표현 식 과 일치 하 는 모든 하위 문자열 을 대체 합 니 다.replaceFirst(String regex,String replacement) 주어진 replacement 을 사용 하여 주어진 정규 표현 식 과 일치 하 는 첫 번 째 문자열 을 대체 합 니 다.

public static void check() {
		//         
		String str = "abgggggcffffdggggs";
		String regex = "(.)\\1+";//
		str = str.replaceAll(regex, "$1");
		System.out.println(str);
	}

PS: 달러 기 호 는 다른 매개 변수 에서 이전 매개 변수 에 있 는 정규 규칙 을 가 져 올 수 있 습 니 다.
	public static void check() {
		//18753377511 -> 187****7511
		String str = "18753377511";
		String regex = "(\\d{3})\\d{4}(\\d{4})";
		System.out.println(str);
		str = str.replaceAll(regex, "$1****$2");
		System.out.println(str);
	}

획득
정규 자체 가 하나의 대상 이다
패턴 류
문자열 로 지정 한 정규 표현 식 은 먼저 이러한 인 스 턴 스 로 컴 파일 되 어야 합 니 다.그 다음 에 얻 은 모델 을 Matcher 대상 을 만 드 는 데 사용 할 수 있 습 니 다. 정규 표현 식 에 따라 이 대상 은 임 의 。 , 。

//
//Pattern p = Pattern.compile("a*b");
// matcher , Matcer
//Matcher m = p.matcher("aaaab");
// Matcher
//boolean b = m.matches();

Matcher

  • matches 방법 으로 전체 입력 서열 을 이 모델 과 일치 시 키 려 고 시도 할 수 있 습 니 다.

  • lookingAt 입력 시퀀스 를 처음부터 이 모드 와 일치 시 키 려 고 시도 합 니 다.
  • find 방법 은 입력 시퀀스 를 스 캔 하여 이 모드 와 일치 하 는 다음 하위 시퀀스 를 찾 습 니 다.
  • public static void check() {
    		String str = "ni hao,wohao,ta ye hao";
    		String regex = "\\b[a-z]{3}\\b";//\\b :    
    		
    		Pattern p = Pattern.compile(regex);
    		Matcher m = p.matcher(str);
    		while(m.find())//    ,    ,   ,     
    		{
    			System.out.println(m.group());
    			System.out.println(m.start()+" : "+m.end());//      
    		}
    	}

    연습:
    aa.. aa. aa.. bb. b. bb. ccc.. ccc 를 abcd 로 변경 합 니 다.
    public static void test() {
    		String str = "aaa...aa..aaa...bbb...b...bbb...ccc...ccc";
    		System.out.println(str);
    		String regex = "\\.+";
    		str = str.replaceAll(regex, "");//  
    		regex = "(.)\\1+";
    		str = str.replaceAll(regex, "$1");//   
    		System.out.println(str);
    	}
    정렬 IP 주소
    public static void test() {
    		
    //		String str = "192.0.0.1    127.0.0.24  3.3.3.5    150.15.3.41";
    //		System.out.println("ip : "+str);
    //		String regex = " +";
    //		String[] strs = str.split(regex);
    //		
    //		TreeSet<String> ts = new TreeSet<String>();//    
    //		for(String s : strs){
    //			ts.add(s);
    //		}
    //		for(String s : ts){//   ,        
    //			System.out.println(s);
    //		}
    		
    		//     ip     ,    0  
    		String str = "192.0.0.1    127.0.0.24  3.3.3.5    150.15.3.41";
    		String regex = "(\\d+)";
    		str = str.replaceAll(regex, "00$1");
    		System.out.println(" 0 : "+str);
    		regex = "0*(\\d{3})";
    		str = str.replaceAll(regex, "$1");
    		System.out.println("  3  : "+str);
    		regex = " +";
    		String[] strs = str.split(regex);
    		
    		TreeSet<String> ts = new TreeSet<String>();//    
    		for(String s : strs){
    			ts.add(s);
    		}
    		for(String s : ts){
    			System.out.println(s.replaceAll("0*(\\d+)", "$1"));
    		}
    	}

    메 일 주소 의 간단 한 검사
    public static void test() {
    		
    		String mail = "[email protected]";
    		String regex = "\\w+@\\w+(\\.[a-zA-Z]{2,3})+";//+       
    		boolean flag = mail.matches(regex);
    		System.out.println(mail+" : "+flag);
    	}

    주의: 개발 시 정규 독해 성 이 떨 어 지 므 로 끊임없이 검증 한 후 포장 합 니 다.
    연습: 웹 파충류: 인터넷 에서 지정 한 규칙 에 맞 는 데 이 터 를 가 져 오 는 프로그램
    메 일 주 소 를 찾다.
    public class asd {
    	public static void main(String[] args) throws Exception {
    		//List<String> list = getmail();//  
    		List<String> list =  getweb();//  
    		for(String i : list){
    			System.out.println(i);
    		}
    	}
    
    	public static List<String> getweb() throws Exception{
    
    		//URL url = new URL("http://192.168.0.1:8080/myweb/mymail.html");
    		URL url = new URL("http://news.baidu.com/");
    		BufferedReader brin = new BufferedReader(new InputStreamReader(url.openStream()));
    		String mail_regex = "\\w+@\\w+(\\.\\w+)+";
    		Pattern p = Pattern.compile(mail_regex);
    		List<String> list = new ArrayList<String>();
    		String line = null;
    		while((line = brin.readLine())!=null){
    			
    			Matcher m = p.matcher(line);
    			while(m.find()){
    				list.add(m.group());
    			}
    		}
    		return list;
    	}
    	public static List<String> getmail() throws Exception {
    		
    		//1.     
    		BufferedReader br = new BufferedReader(new FileReader("g:\\mymail.html"));
    		String mail_regex = "\\w+@\\w+(\\.\\w)+";
    		
    		Pattern p = Pattern.compile(mail_regex);
    		List<String> list = new ArrayList<String>();
    		String line = null;
    		
    		//2.             ,           
    		while((line = br.readLine())!=null){
    			Matcher m = p.matcher(line);
    			while(m.find()){
    				//3.             
    				list.add(m.group());
    			}
    		}
    		return list;
    	}
    }

좋은 웹페이지 즐겨찾기