답변:
정규 표현식에서 특별한 의미의 점이나 다른 문자를 일반 문자로 사용하려면 백 슬래시로 이스케이프 처리해야합니다. Java의 정규 표현식은 일반적인 Java 문자열이므로 백 슬래시 자체를 이스케이프해야합니다. 따라서 두 개의 백 슬래시가 필요합니다.\\.
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의 백 슬래시에 감사드립니다.
"\\.\\*$"
. 중요하지 않은 문자열의 시작 부분과 일치하지 않아도됩니다.