2012-02-27 2 views
3

문자열을 검사하고 싶습니다. 따라서 문자는 0-9 a-z - 만 포함되어 있습니다.grep에서 일부 문자 만 허용 하시겠습니까?

나는

regex='[-a-z0-9]*' 
string='abcd!' 
if [[ $string =~ $regex ]] 
then 
    echo "valid" 
else 
    echo "not valid" 
fi 

$string!을 포함하고 있기 때문에 내가 not valid 예상 한 것 valid를 출력 작업을 수행 할 때.

답변

4

시도 : regex='^[-a-z0-9]*$'. 전체 라인을이 클래스와 강제로 일치시킵니다. 그렇지 않으면 일치하는 항목이 하나만 있거나 전혀 일치하지 않습니다 (*). ^...$은 일치하지 않는 문자열없이 문자열이 시작되고 끝난다 고 말합니다.

+5

제약 조건에 따라 빈 문자열도 허용하지 않으려면'*'를'+'로 변경하십시오. –

1

이 정규식이 작동하려면 경계를 추가해야합니다.

'[-a-z0-9] *'는 다음과 같이 말합니다. 문자열에서 0 번 이상이 문자를 일치시킵니다.

그래서 당신이 찾고있는 무엇을 할 것인가 정규식에 시작과 라인 문자의 끝을 추가 :

regex='^[-a-z0-9]*$' 

다음 단계는의 발생 횟수 제한하는 것입니다 - 한 번에 ''을. 돌진 문자가 문자열의 시작 부분이나 끝 부분에서 나타날 수 있습니까? 시도하지 않을 경우 :

regex='^[a-z0-9]*-?[a-z0-9]*$' 

희망이 있습니다.

관련 문제