답변:
그래 넌 할수있어. 작동합니다.
.
= 어떤 문자\.
= 실제 도트 문자.?
= .{0,1}
= 모든 문자를 0 번 또는 1 번 일치.*
= .{0,}
= 모든 문자를 0 번 이상 일치.+
= .{1,}
= 모든 문자를 한 번 이상 일치예, 작동하지만 표현식을 컴파일 할 때 DOTALL 플래그 .
를 전달하지 않으면 개행과 일치하지 않습니다 .
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
줄 바꿈과 일치 한다고 가정했습니다 . 나는 당신의 대답을 읽게되어 기쁩니다. 나는 그것을 사용해야합니다!
{.,\n,\r,\u2028,\u2029,\u0085}
으로 모든 문자를 일치시키는 데 사용해야 할 수도 있습니다 (유니 코드 문자는 .
Java에서 일치하지 않는 추가 행 종료 문자입니다 ). 그러나 {.,\n,\r}
대부분의 텍스트 파일 에서만 작동합니다.
[\s\S]
은 DOTALL을 사용할 수없는 경우 모든 문자를 일치시키는 인기있는 방법입니다.
정교한 정규식 테스트 및 개발 도구가 많이 있지만 Java로 간단한 테스트 하네스를 원한다면 다음과 같이 사용할 수 있습니다.
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+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은 정규 표현식을 시각화합니다.
(\W|\w)*
이중 탈출 대신에 좋아한다
예제 문제에 대한 구체적인 해결책 :-
시도 [A-Z]*123$
일치합니다 123
, AAA123
, ASDFRRF123
. 123
사용 하기 전에 적어도 문자가 필요한 경우 [A-Z]+123$
.
질문에 대한 일반적인 해결책 (정규 표현식에서 "모든 문자"를 일치시키는 방법) :
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
개행을 포함한 모든 문자와 일치해야합니다. [^
CHARS가]
있는 것을 제외한 모든 문자와 일치 CHARS . CHARS 가 비어 있으면 모든 문자와 일치합니다.
자바 스크립트 예 :
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
나는 이것을 작동한다 항상 점은 모든 문자를 의미하지 않는다. 단일 회선 모드 인 경우 예외입니다. \p{all}
해야한다
String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
System.out.println("true");
} else {
System.out.println("false");
}