[java] 정규식은 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]+