2010-04-04 7 views
3

나는 펄 공식을 사용하고 있습니다. 공백을 무시하고 문자열이 일치하는지 테스트하는 방법은 무엇입니까? 예를 들면.Regex (공백)로 공백 무시하기

$var = "   hello  ";  #I want var to igonore whitespace and still match 
if($var =~ m/hello/) 
{ 



} 
+0

trim()을 사용하는 것이 좋습니다. – Tom

+1

trim()을 고려하지 마십시오. 펄은 그것을 가지고 있지 않습니다. – mob

답변

8

당신이 가지고있는 것은 잘 일치해야합니다. 정규식은 hello 패턴의 모든 일치와 일치하므로 일치하는 $ var 어딘가에서 "hello"를 볼 수만 있다면

반면에 무시하는 것에 대해 엄격하게 생각하려면 앵커해야합니다 처음부터 당신의 문자열이

if($var =~ m/^\s*hello\s*$/) { 
} 

을 종료하고 당신이 당신의 패턴

if($var =~ m/^\s*hello\s+world\s*$/) { 
} 

에 여러 단어가있는 경우 \이야 * 0 개 이상의 공백 문자와 일치하는 \ S + 1 개 이상의 공백을 일치합니다. ^는 줄의 시작과 일치하고 $는 줄의 끝과 일치합니다.

1

다른 말했듯이, 펄 문자열이 아닌 전체 문자열의 아무 곳이나 일치합니다. 처음 시작했을 때이 점이 혼란스럽고 여전히 잡혀있었습니다. 나는 내가 줄/전체 줄 등의 시작을 볼 필요가 있는지에 대해 생각하도록 가르치려고 노력한다.

또 다른 유용한 팁은 \b이다. 이 단어 분할을 찾습니다 때문에/\ bbook \ B/

"book. " 
"book " 
"-book" 

하지만

"booking" 
"ebook" 
0

이 정규식은 약간의 관련이 일치하지만 전달하기 전에 문자열에서 공백을 모두 연결하는 원한다면 if를 통해.

s/[\h\v]+/ /g;