자바 정규 표현 식 의 그룹 과 바 꾸 기
18763 단어 정규 표현 식
1 정규 표현 식 몸 풀기
전화 번호
//
// 13xxx 15xxx 18xxxx 17xxx
System.out.println("18304072984".matches("1[3578]\\d{9}")); // true
// :010-65784236,0316-3312617,022-12465647,03123312336
String regex = "0\\d{2}-?\\d{8}|0\\d{3}-?\\d{7}";
String telStr = "010-43367458";
System.out.println(telStr.matches(regex)); // true
일치 메 일 박스
String mail = "[email protected]";
String reg = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,2}";
System.out.println(mail.matches(reg)); // true
특수 문자 교체
중국어 가 아 닌 문 자 를 비 워 두 기:
String input = " &*%$ @bdfbdbdfdgds23532";
String reg = "[^\\u4e00-\\u9fa5]";
input = input.replaceAll(reg, "");
System.out.println(input); //
한자 의 유 니 코드 인 코딩 범 위 는:
\u4e00-\u9fa5
2 분조그룹 은 괄호 로 구 분 된 정규 표현 식 으로 그룹의 번호 에 따라 그룹 을 참조 할 수 있 습 니 다.그룹 번 호 는 0 으로 전체 표현 식 을 나타 내 고 그룹 번호 1 은 첫 번 째 괄호 가 확 대 된 그룹 을 나타 내 며 이 를 유추 합 니 다.Java API 에서 Pattern 의 설명 을 보십시오: Capturing groups are numbered by counting their opening parentheses from left to right. expression
((A)(B(C)))
, for example, there are four such groups:1. ((A)(B(C)))
2. (A)
3. (B(C))
4. (C)
그 다음 에
A(B(C))D
세 개의 그룹 이 있 습 니 다. 그룹 0 은 ABC 이 고 그룹 1 은 BC 이 며 그룹 2 는 C 입 니 다. 몇 개의 왼쪽 괄호 가 있 는 지 에 따라 몇 개의 그룹 이 있 는 지 확인 할 수 있 습 니 다. 괄호 안의 표현 식 은 모두 하위 표현 식 이 라 고 부 릅 니 다.Eg1:
Matcher 대상 은 여러 가지 방법 을 제공 합 니 다.
goupCount()
이 정규 표현 식 모드 의 그룹 수 를 되 돌려 줍 니 다. '왼쪽 괄호' 의 수 group(int i)
대응 하 는 그룹의 일치 문 자 를 되 돌려 주 고 일치 하지 않 으 면 null start(int group)
대응 하 는 그룹의 일치 하 는 문자 의 시작 색인 end(int group)
대응 하 는 그룹의 일치 하 는 문자 의 마지막 문자 색인 에 1 의 값 을 되 돌려 줍 니 다 // ,
// group(0) \\$\\{([^{}]+?)\\}
// group(1) ([^{}]+?)
String regex = "\\$\\{([^{}]+?)\\}";
Pattern pattern = Pattern.compile(regex);
String input = "${name}-babalala-${age}-${address}";
Matcher matcher = pattern.matcher(input);
System.out.println(matcher.groupCount());
// find()
while (matcher.find()) {
System.out.println(matcher.group(0) + ", pos: "
+ matcher.start() + "-" + (matcher.end() - 1));
System.out.println(matcher.group(1) + ", pos: " +
matcher.start(1) + "-" + (matcher.end(1) - 1));
}
출력:
1
${name}, pos: 0-6
name, pos: 2-5
${age}, pos: 17-22
age, pos: 19-21
${address}, pos: 24-33
address, pos: 26-32
group
중국어 로 번역 하면 팀 을 나 누 는 것 입 니 다.group()
또는 group(0)
전체 정규 표현 식 이 매번 일치 하 는 내용 에 대응 합 니 다. group(1)
괄호 안에 (하위 표현 식 그룹) 일치 하 는 내용 을 표시 합 니 다.Eg2:
그룹 을 보다 직관 적 으로 보기 위해 Eg 1 의 정규 표현 식 에 괄호 를 하나 더 추가 합 니 다.
String regex = "(\\$\\{([^{}]+?)\\})";
Pattern pattern = Pattern.compile(regex);
String input = "${name}-babalala-${age}-${address}";
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(0) + ", pos: " + matcher.start());
System.out.println(matcher.group(1) + ", pos: " + matcher.start(1));
System.out.println(matcher.group(2) + ", pos: " + matcher.start(2));
}
출력:
${name}, pos: 0
${name}, pos: 0
name, pos: 2
${age}, pos: 17
${age}, pos: 17
age, pos: 19
${address}, pos: 24
${address}, pos: 24
address, pos: 26
이 를 통 해 한 쌍 의 괄호 와 한 팀 을 나 눌 수 있 고 왼쪽 괄호 수 를 통 해 몇 개의 그룹 이 있 는 지 확인 할 수 있다.
group()
을 통 해 그룹 에 있 는 일치 하 는 문자열 을 얻 는 응용 장면 이 매우 광범 위 하 다. 필자 의 한 프로젝트 에서 이 특성 을 사용 하여 재 미 있 는 마스크 교 체 를 실현 했다. 감동!3. 그룹 교체
Eg1:
String tel = "18304072984";
// , $n n
tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.print(tel); // output: 183****2984
replace All 은 문자열 을 바 꾸 는 방법 입 니 다. 정규 표현 식 에서 괄호 는 그룹 을 표시 합 니 다. replace All 의 매개 변수 2 에 서 는 $n (n 은 숫자) 을 사용 하여 하위 표현 식 에 일치 하 는 그룹 문자열 을 순서대로 참조 할 수 있 습 니 다.
"(\\d{3})\\d{4}(\\d{4})", "$1****$2"
는 앞 ( ) ( )
으로 나 뉘 어 ( $1)( * )( $2)
로 바 꿀 수 있 습 니 다.Eg2:
String one = "hello girl hi hot".replaceFirst("(\\w+)\\s+(\\w+)", "$2 $1");
String two = "hello girl hi hot".replaceAll("(\\w+)\\s+(\\w+)", "$2 $1");
System.out.println(one); // girl hello hi hot
System.out.println(two); // girl hello hot hi
Eg 1 을 이해 하면 이 예 도 자연히 이해 할 수 있다.
Eg3:
실 용적 인 예 를 들 어 문장 부호 의 교 체 를 반복 합 니 다.
String input = " ,,, ,,, !!!…………";
//
String duplicateSymbolReg = "([。?!?!,]|\\.\\.\\.|……)+";
input = input.replaceAll(duplicateSymbolReg, "$1");
System.out.println(input);
출력:
, , !……
정규 표현 식:
([。?!?!,]|\\.\\.\\.|……)+
괄호 는 하나의 그룹 입 니 다. 하나의 문장 부 호 를 표시 합 니 다. +
이 그룹 에 한 번 또는 여러 번 나타 나 는 것 을 표시 합 니 다. $1
그룹의 내용 (하나의 문장 부호) 을 표시 합 니 다.replace All 은 문자열 을 바 꾸 기 위해 $1
를 사용 합 니 다.Eg4:
IP 주소 정렬
String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
ip = ip.replaceAll("(\\d+)", "00$1");
System.out.println(ip);
ip = ip.replaceAll("0*(\\d{3})", "$1");
System.out.println(ip);
String[] strs = ip.split(" ");
Arrays.sort(strs);
for (String str : strs) {
str = str.replaceAll("0*(\\d+)", "$1");
System.out.println(str);
}
출력:
00192.0068.001.00254 00102.0049.0023.00013 0010.0010.0010.0010 002.002.002.002 008.00109.0090.0030
192.068.001.254 102.049.023.013 010.010.010.010 002.002.002.002 008.109.090.030
2.2.2.2
8.109.90.30
10.10.10.10
102.49.23.13
192.68.1.254
4 역방향 참조
작은 괄호 로 하위 표현 식 을 묶 으 면 이 하위 표현 식 과 일치 하 는 텍스트 는 표현 식 이나 다른 프로그램 에서 더 많은 처 리 를 할 수 있 습 니 다.기본 적 인 상황 에서 각 그룹 은 자동 으로 하나의 그룹 번 호 를 가지 게 됩 니 다. 규칙 은 그룹의 왼쪽 괄호 를 표지 로 하고 왼쪽 에서 오른쪽으로 첫 번 째 그룹의 그룹 번 호 는 1 이 고 두 번 째 는 2 로 유추 합 니 다.
Eg:
/* */
String regex = "(.)\\1(.)\\2";
System.out.println(" ".matches(regex)); // true
System.out.println(" ".matches(regex)); // false
위
(.)
는 하나의 그룹 을 나타 내 고 안 .
은 임 의 문 자 를 나타 내 며 모든 문 자 는 하나의 그룹 으로 나 뉘 었 다. \\1
은 그룹 1
이 또 한 번 나 타 났 고 \\2
은 그룹 2
가 또 한 번 나 타 났 다.그 일치
는 정규 표현 식 을 어떻게 씁 니까?위의 예 에 따 르 면
을 한 조로 나 눈 다음 에 이 조 가 다시 나 타 났 다. 바로
이다.String regex = "(..)\\1";
System.out.println(" ".matches(regex)); // true
System.out.println(" ".matches(regex)); // false
5 역방향 참조 교체
Eg1:
String str = " ... ... .. ... ... .... ... ... .. . ... ... !!!";
/* . */
str = str.replaceAll("\\.+", "");
System.out.println(str);
str = str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
출력:
!!!
!
(.)
모든 문자 가 하나의 그룹 이 된다 는 것 을 나타 낸다.\\1+
그룹 (한 글자) 을 참조 하여 이 그룹 이 한 번 또는 여러 번 나타 나 는 것 을 나타 낸다.$1
참조 그룹 (.)
은 여러 개의 중복 문 자 를 하나의 문자 로 바 꿉 니 다.Eg2:
반복 되 는 두 자릿수 사이 의 내용 바 꾸 기:
"xx12abdd12345".replaceAll("(\\d{2}).+?\\1", ""); // xx345
신기 하 죠?
replace
시 리 즈 를 사용 하 는 방법 에 주의해 야 할 이상: 자바 replace All () 방법 오류 보고 Illegal group reference 참고: 자바 정규 편 - 27 - 정규 교체 와 그룹 기능 정규 표현 식 30 분 입문 튜 토리 얼 정규 기초 - 캡 처 그룹 (capture group)자바 정규 표현 식 Pattern 과 Matcher 류 자바 학습 의 정규 표현 식 자바 진급 - 정규 표현 식 검색 을 사용 하여 String 의 특정 문자 와 정규 표현 식 에 관 한 모든 자바 의 빈 칸, 구두점 기 호 를 제거 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.