2017-12-27 39 views
1

나는 사용자가 나는 사용자의 메시지를 시도하고 캡처하는 정규식 문자열을 사용하고 나중에 그것을 분석하고 있습니다 /newdb nameofdatabaseTelegram 봇에 매개 변수를 전달하고 정규식을 사용하여 구문 분석 하시겠습니까?

Telegram::Bot::Client.run(token) do |bot| 
    bot.listen do |message| 
    case message.text 
    when '/newdb.*/' 
     bot.api.send_message(chat_id: message.chat.id, text: "created!, #{message.from.first_name}") 
    end 
    end 
end 

를 입력하면 새 데이터베이스를 작성하도록되어 전보 봇이있다. 불행하게도, 봇는 "created!" 라인을 인쇄하지 않습니다,이 경우 (주어진 명령에 응답하지 않습니다. "

나는 루비 래퍼를 사용하여 전보 봇에 사용자의 입력을 캡처에 대해 갈 수있는 방법

?

Telegram::Bot::Client.run(token) do |bot| 
    bot.listen do |message| 
    case message.text 
    when /^\/newdb\s(.*)/ 
     database = $~[1] # get the database name. $~[N] regexp matches. 
     bot.api.send_message(chat_id: message.chat.id, text: "created!, #{message.from.first_name}") 
    end 
    end 
end 

%r|\A/newdb\b.*| : 명시 적 메시지의 중간에 캐리지 리턴 쫓아 및 fo를 %r 표기법을 사용하지 않는 \A를 사용

답변

2
/는 정규 표현식에서 메타 문자이기 때문이다

는 여기에 바로 정규 표현식이다 r에 슬래시가있을 때 regexps. 들으 @mudasobwa

확인하는 정규식 표현 here

+1

'% r에 | \ A/한 newdb의 \의 B * |':. 사용'\ A' 명시 적 메시지와 사용의 중간에 캐리지 리턴 쫓아 않는' 슬레시를 포함 할 때 regexps에 대한 % r 표기법. 또한, 괄호는 중복 AFAICT입니다. – mudasobwa