입력한 문자열이 모두 소문자인지 확인하는 숙제를 하고 있습니다. 다음은 우리가 제공하는 기본 스크립트입니다.
변경해야 할 줄은 다음과 같습니다.
if [[ "$input" =~ Add your regular expression here ]]
[a-z]
소문자 하나만 입력 하면 유효성이 검사됩니다. "Brian"을 사용하면 [[:lower:]]
유효성이 검사되고 "cats"는 확인되지 않지만 횡설수설하는 것은 trhrh
괜찮습니다. 여기서 사용할 정규식을 모르겠습니다. 도움을 주시면 대단히 감사하겠습니다.
답변1
문자열에 다음과 같은 내용이 포함되어 있는지 테스트합니다.~ 아니다소문자.
if [[ "$input" =~ [^[:lower:]] ]]; then
# contains something that is not a lower case letter
else
# contain only lower case letters
fi
또는,
if ! [[ "$input" =~ [^[:lower:]] ]]; then
# contain only lower case letters
fi
대괄호로 묶인 표현식의 시작 부분은 ^
일치 의미를 반대로 하여 다음과 같은 [^abc]
단일 문자와 일치합니다.~ 아니다 a
, b
, 또는 c
.
또는 문자열을 양쪽 끝에 고정하여 문자열의 전체 길이를 일치시킵니다.
if [[ "$input" =~ ^[[:lower:]]+$ ]]; then
# contain only lower case letters
fi
^
표현식의 시작 부분 은 문자열의 시작 부분에만 고정되고 $
끝 부분은 문자열 끝 부분에 고정됩니다. 그 사이에는 를 사용한 소문자 [[:lower:]]+
, 즉 하나 이상의 소문자만 허용됩니다. *
대신 사용하면 +
표현식이 빈 문자열에서도 성공적으로 일치할 수 있습니다.
[[:lower:]]
(단일 소문자와 일치) 및 [:lower:]
문자 :
, l
, o
, w
, e
또는 ) 중 하나 와 일치하는 차이점도 확인하세요 r
. 원래 질문에서 Brian
일치하는 [:lower:]
항목 은 cats
일치하지 않는다고 말씀하셨는데, 이제 이해가 되실 겁니다. 편집 시 표현식을 올바른 으로 변경했으며 [[:lower:]]
이제 cats
일치해야 합니다.
정규식 일치에 대해 글로빙 일치가 있는 경우:
if [[ "$input" == *[![:lower:]]* ]]; then
# contains something that is not a lower case letter
else
# contain only lower case letters
fi
globbing 패턴에서 !
대괄호로 묶인 표현식의 시작 부분은 정규 표현식의 경우와 동일하게 작동합니다 ( 글로빙 패턴에서도 인식할 수 있다고 ^
생각하지만 ).bash
^
답변2
원하는 경우 이 라이너로 확인할 수도 있습니다.
echo "$input" | grep -qE '^[[:lower:]]*$' && echo "All LowerCase" || echo "Not All LowerCase"