정규식은 String.matches ()에서 작동하지 않습니다.
이 작은 코드 조각이 있습니다
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]"))
{
System.out.println(s);
}
}
인쇄 예정
dkoe
그러나 아무것도 인쇄하지 않습니다 !!
Java의 이름이 잘못된 .matches()
메소드에 오신 것을 환영합니다 . 모든 입력을 시도하고 일치시킵니다. 불행히도, 다른 언어들은 다음과 같이 따라 갔다 :
정규식이 입력 텍스트와 일치하는지 확인하려면 Pattern
, a Matcher
및 .find()
매처 의 메소드를 사용하십시오.
Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
// match
입력 내용에 소문자 만 포함되어 있는지 확인하려면을 사용할 수 .matches()
있지만 하나 이상의 문자를 일치시켜야합니다 . +
에서와 같이 문자 클래스에 a 를 추가 하십시오 [a-z]+
. 또는 사용 ^[a-z]+$
하고 .find()
.
[a-z]
a와 z 사이 의 단일 문자 와 일치합니다 . "d"
예를 들어 문자열이 그냥 이면 일치하고 인쇄되었을 것입니다.
[a-z]+
하나 이상의 문자와 일치하도록 정규식을 변경해야합니다 .
String.matches
하위 문자열뿐만 아니라 전체 문자열이 정규식과 일치 하는지 여부를 반환합니다 .
java의 정규 표현식 구현은 전체 문자열과 일치하려고합니다.
그것은 일치하는 부분을 찾으려고하는 펄 정규 표현식과 다릅니다.
소문자가 아닌 문자열을 찾으려면 패턴을 사용하십시오. [a-z]+
하나 이상의 소문자를 포함하는 문자열을 찾으려면 패턴을 사용하십시오. .*[a-z].*
익숙한
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]+"))
{
System.out.println(s);
}
}
나는 같은 문제에 한 번 직면했다.
Pattern ptr = Pattern.compile("^[a-zA-Z][\\']?[a-zA-Z\\s]+$");
위의 실패!
Pattern ptr = Pattern.compile("(^[a-zA-Z][\\']?[a-zA-Z\\s]+$)");
위의 (
및 내의 패턴으로 작업했습니다 )
.
정규식 은 길이가 1 인 문자열과 만 일치하므로 [a-z]
일치하지 않습니다 .dkoe
[a-z]+
()
일치하는 패턴을 캡처하려면 최소한 다음 과 같이 패턴을 수정해야합니다.
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("(^[a-z]+$)"))
{
System.out.println(s);
}
}
다음을 수행하여 패턴 대소 문자를 구분하지 않을 수 있습니다.
Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);
참고 URL : https://stackoverflow.com/questions/8923398/regex-doesnt-work-in-string-matches
'Programming' 카테고리의 다른 글
htaccess로 폴더 및 파일에 대한 직접 액세스 거부 (0) | 2020.07.05 |
---|---|
Android : 의도를 사용하여 일반 텍스트 공유 (모든 메시징 앱에) (0) | 2020.07.05 |
텍스트 상자가 포커스를 잃을 때까지 jQuery 텍스트 상자 변경 이벤트가 발생하지 않습니까? (0) | 2020.07.05 |
파이썬에서 숫자의 모든 요소를 찾는 가장 효율적인 방법은 무엇입니까? (0) | 2020.07.05 |
원격 MySQL 연결 활성화 : ERROR 1045 (28000) : 사용자의 액세스 거부 (0) | 2020.07.05 |