[java] Java RegEx 메타 문자 (.) 및 일반 점?

Java RegEx .에서 문장에서 사용하는 메타 문자와 일반 점 의 차이점을 찾는 방법 . 너무 같은 다른 메타 문자에 대한 이런 종류의 상황을 처리하는 방법 ( *, +, \d, …)



답변

정규 표현식에서 특별한 의미의 점이나 다른 문자를 일반 문자로 사용하려면 백 슬래시로 이스케이프 처리해야합니다. Java의 정규 표현식은 일반적인 Java 문자열이므로 백 슬래시 자체를 이스케이프해야합니다. 따라서 두 개의 백 슬래시가 필요합니다.\\.


답변

다른 회원들이 제안한 솔루션은 저에게 효과적이지 않습니다.

그러나 나는 이것을 발견했다 :

Java regexp 쓰기에서 점을 벗어나려면 [.]


답변

Perl 스타일 정규 표현식 (Java 정규식 엔진이 어느 정도 기반)은 다음 문자를 특수 문자로 취급합니다.

.^$|*+?()[{\캐릭터 클래스 이외 의 특별한 의미를 가지고

]^-\문자 클래스 에서 특별한 의미를 갖습니다 ( [...]).

따라서 컨텍스트에 따라 해당 기호 (및 해당 기호 만)를 이스케이프해야합니다 (또는 문자 클래스의 경우 잘못 해석 할 수없는 위치에 배치).

다른 문자를 피하는 것은 당연히 가능하지만 일부 정규식 엔진은이를 구문 오류로 처리합니다. 예를 들어 \_.NET에서 오류가 발생합니다.

예를 들어 , Perl에서는 \<리터럴 <로 해석 되지만 egrep“단어 경계”라는 의미 로 잘못된 결과 가 발생할 수 있습니다.

쓰기 그래서 -?\d+\.\d+\$경기에 1.50$, -2.00$등을 [(){}[\]]괄호 / 중괄호 / 괄호의 모든 종류와 일치하는 문자 클래스.

사용자 입력 문자열을 정규식으로 안전한 형식으로 변환해야하는 경우을 사용하십시오 java.util.regex.Pattern.quote.

더 읽을 거리 : Jan Goyvaert의 메타 문자 탈출에 대한 RegexGuru 블로그


답변

백 슬래시로 특수 문자를 피하십시오. \., \*, \+, \\d,과에 이렇게. 확실하지 않은 경우 비 알파벳 문자는 특수한지 여부에 관계없이 피할 수 있습니다. 자세한 정보 는 java.util.regex.Pattern에 대한 javadoc을 참조하십시오 .


답변

다음은 붙여 넣기를 직접 복사 할 수있는 코드입니다.

String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
   system.out.println(imageNameArray[i]);
}

실수로 “.”앞뒤에 공백이 있으면 어떻게됩니까? 그런 경우는? 이러한 공간도 항상 고려하는 것이 가장 좋습니다.

String imageName = "picture1  . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
    for(int i =0; i< imageNameArray.length ; i++)
    {
       system.out.println(imageNameArray[i]);
    }

여기서 \\ s *는 공백을 고려하여 필요한 분리 문자열 만 제공합니다.


답변

“. *”로 끝나는 문자열을 일치 시키려면 다음을 사용해야했습니다.

"^.*\\.\\*$"

당신이 그것에 대해 생각하면 바보 : D 여기에 무슨 뜻인지. 문자열의 시작 부분에는 문자 “0”이 있고 그 뒤에 점 “.”이있을 수 있습니다. 문자열 끝에 별표 (*)가옵니다.

나는 이것이 누군가에게 유용하기를 바랍니다. Fabian의 백 슬래시에 감사드립니다.


답변

문장이 “. “로 끝나는 지 확인하려면 패턴 끝에 [\. \ ] $를 추가 해야합니다.