2011-01-21 3 views
2

Erlang에서 regexp를 receive와 일치시키는 법?

다음 블록이 있습니다 :

receive 
... 
    {raw, Text} -> 
     send(Socket, Text), 
     master(State); 
... 
end. 

Text에서 regexp를 일치시킬 수 있는지 궁금하고 Text가 일치하면 간단한 절이 있습니다.

+0

'Text'가 정규식과 일치하는 경우에만 메시지를 받으시겠습니까? – 3lectrologos

답변

6

정규식 패턴이 없으므로 패턴 일치 (이 경우 수신 패턴)에서는 직접 수행 할 수 없습니다. 일반 표현식 라이브러리가 있으므로 {text, Text} 메시지를받은 후에 일치 항목을 시도 할 수는 있지만 정규식과 일치하는 경우에만 선택적으로 메시지를받는 것과는 다릅니다.

정규 표현식은 Text의 일정한 접두사 인 경우 당신이 "some prefix" ++ _Var 구문을 사용할 수 있습니다 "^some prefix"처럼,이보다 더 잘 할 수있는 일 경우 :

receive 
... 
    {raw, Text = "some prefix" ++ _} -> 
     send(Socket, Text), 
     master(State); 
... 
end 
+0

예를 들어 Text에서 http URL을 필터링 할 수 없습니까? – Istvan

+0

나는 간단한'Text = _ ++ "http : //"++ _'가 작동 할 수 있지만 더 좋은 방법이라고 생각한다. 정규식 모듈과 "if"또는 "case"문을 사용한다. – seriyPS

+0

regexp 모듈에서 URL을 줄 수 있는가? 너는 말하는거야? – Istvan

4

당신은에서 사용하는 정규 표현식을 사용할 수 없습니다를 모든 패턴에서 적어도 정규 표현식으로. 패턴은 데이터 생성자와 정확히 동일한 구조를가집니다. 즉, 정규 표현식이 매우 단순하지 않고 @archaelus 예제와 같이 패턴으로 표현 될 수 없다면 메시지 큐에서 먼저 제거하지 않고 테스트 할 방법이 없습니다. 그런 다음 정규 표현식 모듈을 사용하여 문자열을 테스트하고 문자열을 추출 할 수 있습니다.

가까운 미래에 변하지 않을 것으로 보입니다.

+0

감사합니다. 이 작동합니다. – Istvan

관련 문제