Java 프로그래밍에서 정규 표현식 사용하기
boolean matches(String regex)
regex: 지정한 정규 표현식입니다.반환값: boolean 형식을 반환합니다.
이 방법은 현재 문자열이 매개 변수regex가 지정한 정규 표현식과 일치하는지 알려주는 데 사용됩니다. 반환 값은 boolean 형식입니다. 현재 문자열이 정규 표현식과 일치하면 이 방법은true를 되돌려줍니다. 그렇지 않으면false를 되돌려줍니다.
정규 표현식은 특수한 의미를 가진 문자로 구성된 문자열입니다. 특수한 의미를 가진 문자를 원 문자라고 합니다. 다음은 정규 표현식의 일부 원 문자를 열거합니다. 정규 표현식의 쓰기 방법에서 다음 원 문자 앞에'\'기호를 추가하여 번역해야 합니다. 예를 들어 원 문자'\d'는 정규 표현식의 쓰기 방법에서'\d'이지만'.번역 후에는 임의의 문자가 아니라 구체적인 문장을 나타낸다.
.:임의의 문자를 대표합니다.
\d: 0~9의 모든 숫자를 나타냅니다.
\D: 숫자가 아닌 문자를 나타냅니다.
\s: 공백 문자를 나타냅니다.
\S: 비어 있지 않은 문자를 나타냅니다.
\w: 식별자로 사용할 수 있는 문자를 나타내지만 "$"은 포함되지 않습니다.
\W: 식별자로 사용할 수 없는 문자를 나타냅니다.
\p{Lower}: 소문자 a~z를 나타냅니다.
\p{Upper}: 대문자 A~A를 나타냅니다.
\p{ASCII}: ASCII 문자입니다.
\p{Alpha}: 알파벳 문자입니다.
\p{Digit}: 10진수, 0~9.
\p{Alnum}: 숫자 또는 알파벳 문자입니다.
\p{Punct}: 문장부호입니다.
\p{Graph}: 보이는 문자입니다.
\p{Print}: 문자를 인쇄할 수 있습니다.
\p{Blank}: 공백 또는 탭입니다.
\p{Cntrl}: 문자를 제어합니다.
정규 표현식을 사용할 때 특정한 유형의 원 문자가 여러 번 출력되어야 한다면 하나씩 입력하는 것은 상당히 번거롭다. 이때 정규 표현식의 한정 문자를 사용하여 횟수를 반복할 수 있다. 다음은 상용 한정자와 그 의미를 열거한다.
?:0번 또는 1번.
*: 횟수 또는 여러 번.
+: 1회 또는 1회.
{n}: n번 반복합니다.
{n,}: 적어도 n번은 반복합니다.
{n, m}: n~m회 반복합니다.
정규 표현식에서 여러 문자를 대괄호로 묶을 수도 있습니다. 대괄호의 각종 정규 표현식은 서로 다른 의미를 대표합니다. 다음은 대괄호 중원 문자와 그 의미를 열거합니다.
[abc]: a, b 또는 c를 나타냅니다.
[^abc]: a, b, c 이외의 모든 문자를 표시합니다.
[a-zA-Z]: a~z 또는 A~Z의 모든 문자.
[a-d[m-p]:a~d 또는 m~p의 모든 문자.
[a-z & [def]:d, e 또는 f.
[a-z & [^bc]:a~z 사이에는 b와 c의 모든 문자가 포함되지 않습니다.
[a-z & [^m-p]]:a~z 사이에는 m~p의 모든 문자가 포함되지 않습니다.
사용 예:
1. 자동차 번호:
/**
*
* @description:
* @param carNum
* A106EK
* @return :true :false
*/
public static boolean validateCarNum(String carNum) {
boolean result = false;
String[] provence = new String[] { " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };
String reg = "[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}";
boolean firstChar = false;
if (carNum.length() > 0) {
firstChar = Arrays.asList(provence).contains(carNum.substring(0, 1));
}
try {
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(carNum);
if (m.matches() && firstChar) {
result = true;
} else {
result = false;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
2. 핸드폰 번호:
/**
*
* @description:
* @param mobileNum 15516985859
* @return :true :false
*/
public static boolean isMobileNum(String mobileNum) {
boolean result = false;
try {
Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
Matcher m = p.matcher(mobileNum);
result = m.matches();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
휴대폰 번호 + 고정 전화: 010-111111, 1111, 551, 6985, 90377-11111
//java ( 、 )
String legalPhone = "";
String regExp ="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}|[0]{1}[0-9]{2,3}-[0-9]{7,8}$";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(importPotentialBFOs[i].getLegalPhone());
if(m.find()){ // :m.find , false
legalPhone = importPotentialBFOs[i].getLegalPhone();
uploadTmp.setLegalTelephone(legalPhone);
}else{
throw new BizException(" !");
}
3. 실수:
String[] arrs=new String[]{"a","1.123","-1.23","0","+111"};
String regex="-?\\d+\\.?\\d*";
Pattern p = Pattern.compile(regex);
for (int i = 0; i < arrs.length; i++) {
Matcher m = p.matcher(arrs[i]);
System.out.println(arrs[i]+":"+m.matches());
}
인쇄:a:false
1.123:true
-1.23:true
0:true
+111:false
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.