[java] 정규식에서“모든 문자”를 일치시키는 방법?

다음이 일치해야합니다.

AAA123
ABCDEFGH123
XXXX123

내가 할 수있는 일 : ".*123"?



답변

그래 넌 할수있어. 작동합니다.

  • . = 어떤 문자
  • \. = 실제 도트 문자
  • .?= .{0,1}= 모든 문자를 0 번 또는 1 번 일치
  • .*= .{0,}= 모든 문자를 0 번 이상 일치
  • .+= .{1,}= 모든 문자를 한 번 이상 일치

답변

예, 작동하지만 표현식을 컴파일 할 때 DOTALL 플래그 .를 전달하지 않으면 개행과 일치하지 않습니다 .

Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();


답변

패턴 .을 사용하여 임의의 문자를 한 번 일치 시키고 , .*임의의 문자를 0 번 이상 .+일치시키고 , 임의의 문자를 1 회 이상 일치 시키십시오.


답변

정교한 정규식 테스트 및 개발 도구가 많이 있지만 Java로 간단한 테스트 하네스를 원한다면 다음과 같이 사용할 수 있습니다.

    String[] tests = {
        "AAA123",
        "ABCDEFGH123",
        "XXXX123",
        "XYZ123ABC",
        "123123",
        "X123",
        "123",
    };
    for (String test : tests) {
        System.out.println(test + " " +test.matches(".+123"));
    }

이제 새로운 테스트 케이스를 쉽게 추가하고 새로운 패턴을 시도 할 수 있습니다. 정규 표현식을 탐험하는 재미를 즐기십시오.

또한보십시오


답변

아니요, *0 개 이상의 문자와 일치합니다. +대신 하나 이상을 일치시키는을 사용해야 합니다.

이 표현은 당신에게 더 효과적 일 수 있습니다 : [A-Z]+123


답변

내가 이것을 인코딩하는 가장 일반적인 방법은 멤버가 가능한 모든 문자 세트의 파티션을 형성하는 문자 클래스를 사용하는 것입니다.

보통 사람들이 쓰기와 [\s\S]생각 (공백 또는 공백이 아닌), [\w\W], [\d\D], 등 모든 작업을 할 것이다.


답변

.*그리고 .+새로운 라인을 제외한 모든 문자에 대한 것입니다.

더블 이스케이프

줄 바꿈을 포함하려는 경우 Java 또는 C ++와 같이 이중 이스케이프가 필요한 언어에 대해 다음 표현식이 작동 할 수도 있습니다.

[\\s\\S]*
[\\d\\D]*
[\\w\\W]*

0 번 이상

[\\s\\S]+
[\\d\\D]+
[\\w\\W]+

한 번 이상.

단일 이스케이프 :

C #, PHP, Ruby, PERL, Python, JavaScript와 같은 일부 언어에는 이중 이스케이프가 필요하지 않습니다.

[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+

테스트

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex_1 = "[\\s\\S]*";
        final String regex_2 = "[\\d\\D]*";
        final String regex_3 = "[\\w\\W]*";
        final String string = "AAA123\n\t"
             + "ABCDEFGH123\n\t"
             + "XXXX123\n\t";

        final Pattern pattern_1 = Pattern.compile(regex_1);
        final Pattern pattern_2 = Pattern.compile(regex_2);
        final Pattern pattern_3 = Pattern.compile(regex_3);

        final Matcher matcher_1 = pattern_1.matcher(string);
        final Matcher matcher_2 = pattern_2.matcher(string);
        final Matcher matcher_3 = pattern_3.matcher(string);

        if (matcher_1.find()) {
            System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
        }

        if (matcher_2.find()) {
            System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
        }
        if (matcher_3.find()) {
            System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
        }
    }
}

산출

Full Match for Expression 1: AAA123
    ABCDEFGH123
    XXXX123

Full Match for Expression 2: AAA123
    ABCDEFGH123
    XXXX123

Full Match for Expression 3: AAA123
    ABCDEFGH123
    XXXX123

표현식을 살펴보고 싶다면 regex101.com의 오른쪽 상단에 설명되어 있습니다. 원하는 경우이 링크 에서 일부 샘플 입력과 어떻게 일치하는지 확인할 수도 있습니다.


정규식 회로

jex.im은 정규 표현식을 시각화합니다.

여기에 이미지 설명을 입력하십시오