자바 정규 표현 식 기초 입문 지식
정규 표현 식 은 패턴 일치 와 교체 에 사용 할 수 있 는 규범 으로 정규 표현 식 은 일반적인 문자(예 를 들 어 문자 a 에서 z)와 특수 문자(메타 문자)로 구 성 된 문자 모드 로 문자 주 체 를 찾 을 때 일치 하 는 문자열 하나 이상 을 설명 합 니 다.정규 표현 식 은 템 플 릿 으로 검색 한 문자열 과 일치 합 니 다.
정규 표현 식
1.정의:정규 표현 식 은 패턴 일치 와 교체 에 사용 할 수 있 는 규범 입 니 다.정규 표현 식 은 일반적인 문자(예 를 들 어 문자 a 에서 z)와 특수 문자(메타 문자)로 구 성 된 문자 모드 입 니 다.문자 주 체 를 찾 을 때 일치 하 는 문자열 이나 여러 개 를 설명 합 니 다.정규 표현 식 은 템 플 릿 으로 검색 한 문자열 과 일치 합 니 다.
2.용도:
문자열 일치(문자 일치)
문자열 찾기
문자열 바 꾸 기
문자열 분할
예 를 들 면:
웹 페이지 에서 이메일 주 소 를 꺼내다
IP 주소 가 정확 한 지
웹 페이지 에서 링크 를 끄집어내다
3.자바 에서 정규 표현 식 을 처리 하 는 클래스:
java.lang.String
java.util.regex.Pattern:패턴 클래스:문자열 이 일치 하 는 모드 입 니 다.이 모드 자체 가 컴 파일 되 었 습 니 다.사용 하면 효율 이 높 습 니 다.
java.util.regex.Matcher:일치 클래스:이 모드 는 어떤 문자열 에 일치 하 는 결과 입 니 다.이 결 과 는 여러 개 있 을 수 있 습 니 다.
4:다음 작은 프로그램 을 통 해 정규 표현 식 을 간단하게 소개 합 니 다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
//matches() ,"."
p("abc".matches("..."));
// "a2389a" * ,\d “0--9”
p("a2389a".replaceAll("\\d", "*"));
// a--z 3 ,
Pattern p = Pattern.compile("[a-z]{3}");
// , Matcher
Matcher m = p.matcher("abc");
p(m.matches());
//
p("abc".matches("[a-z]{3}"));
}
public static void p(Object o){
System.out.println(o);
}
}
다음은 인쇄 결과 입 니 다.true
a****a
true
true
현재 일부 실험 을 통 해 정규 표현 식 의 일치 규칙 을 설명 합 니 다.여 기 는 Greedy 방식 입 니 다.
. 모든 문자
a? a.한 번 또는 한 번 도 없어 요.
a* 0 회 혹은 여러 번
a+ 한 번 혹은 여러 번
a{n}? 마침 n 회
a{n,}? 적어도 n 회
a{n,m}? a.적어도 n 번 이지 만 m 번 을 넘 지 않 는 다.
//초보 적 인식.*+?
p("a".matches("."));//true
p("aa".matches("aa"));//true
p("aaaa".matches("a*"));//true
p("aaaa".matches("a+"));//true
p("".matches("a*"));//true
p("aaaa".matches("a?"));//false
p("".matches("a?"));//true
p("a".matches("a?"));//true
p("1232435463685899".matches(" \\d{3,100}"));//true
p("192.168.0.aaa".matches(" \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//false
p("192".matches("[0-2][0-9][0-9]"));//true
[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](빼 기)
//범위.
p("a".matches("[abc]"));//true
p("a".matches("[^abc]"));//false
p("A".matches("[a-zA-Z]"));//true
p("A".matches("[a-z]|[A-Z]"));//true
p("A".matches("[a-z[A-Z]]"));//true
p("R".matches("[A-Z&&[RFG]]"));//true
\d 숫자:[0-9]
\D 비 숫자:[^0-9]
\s 공백 문자:[\t\x0B\f\r]
\S 비 공백 문자:[^\]
\w 단어 문자:[a-zA-Z0-9]
\W 단어 가 아 닌 문자:[^\w]
//알다
p("\r\t".matches(" \\s(4)"));//false
p(" ".matches(" \\S"));//false
p("a_8 ".matches(" \\w(3)"));//false
p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));//true
p(" \\".matches("\\\\"));//true
경계 정합 기
^ 줄 의 첫머리
$ 행 의 끝
\b 단어 경계
\B 비 단어 경계
\A 입력 의 시작
\G 이전 일치 하 는 끝
\Z 입력 한 끝 은 마지막 끝 문자 에 만 사 용 됩 니 다(있 으 면)
\z 입력 의 끝
//경계 일치
p("hello sir".matches("^h.*"));//true
p("hello sir".matches(".*ir$"));//true
p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//true
p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));//false
//공백 줄:하나 이상(공백 및 비 줄 바 꿈)으로 시작 하고 줄 바 꿈 으로 끝 냅 니 다.
p(" ".matches("^[\\s&&[^\]]*\$"));//true
방법 해석
matches():전체 문자열 과 일치 합 니 다.
find():짝 짓 기 문자열
lookingAt():전체 문자열 의 시작 부분 부터 영원히 일치 합 니 다.
p(" [email protected]".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));//true
//matches() find() lookingAt()
Pattern p = Pattern.compile(" \\d{3,5 }");
Matcher m = p.matcher("123-34345-234-00");
//"123-34345-234-00"전 체 를 정규 표현 식 엔진 으로 일치 하 는 것 을 찾 습 니 다.첫 번 째"-"가 일치 하지 않 으 면 중단 합 니 다.
//하지만 맞지 않 는"-"뱉 지 않 아 요."
p(m.matches());
//일치 하지 않 는"-"토 해 내기"
m.reset();
//1:앞 에 p(m.matches()가 있 을 때;하위 문자열 찾기"...34345-234-00"부터 시작 합 니 다.
//1,2,2 번 이 될 겁 니 다.'34345'와'234'뒤에 2 개 는 false 로 나 오지 않 습 니 다.
//2:앞 에 p(m.matches()가 있 을 때;m.reset();하위 문자열 찾기"123-34345-234-00"부터 시작 합 니 다.
//true,true,true,false
p(m.find());
p(m.start()+"---"+m.end());
p(m.find());
p(m.start()+"---"+m.end());
p(m.find());
p(m.start()+"---"+m.end());
p(m.find());
//못 찾 으 면 이상 java.lang.IllegalStateException
//p(m.start()+"---"+m.end());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
문자열 교체:다음 방법 은 문자열 교체 에 매우 유연 합 니 다.
//문자열 바 꾸 기
//Pattern.CASE_INSENSITIVE 대소 문 자 는 민감 하지 않 습 니 다.
Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java jAva ILoveJavA youHateJAVA adsdsfd");
//저장 문자열
StringBuffer buf = new StringBuffer();
//계수 기우 수
int i = 0;
while(m.find()){
i++;
if(i%2 == 0){
m.appendReplacement(buf, "java");
}else{
m.appendReplacement(buf, "JAVA");
}
}
//이 말 을 추가 하지 않 으 면 문자열 adsdsfd 가 버 려 집 니 다.
m.appendTail(buf);
p(buf);
결과 인쇄:
JAVA java JAVA ILovejava youHateJAVA adsdsfd
패 킷
//그룹 으로 나 누 기,()로 나 누 기
Pattern p = Pattern.compile("( \\d{3,5})([a-z]{2 })");
String s = "123aa-34345bb-234cc-00";
Matcher m = p.matcher(s);
p(m.groupCount());//2 조
while(m.find()){
p(m.group());//숫자 알파벳 다 있어 요.
//p(m.group(1));//숫자 만 있어 요.
//p(m.group(2));//알파벳 만 있어 요.
}
정규 표현 식
자바 정규 표현 식 사용
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.