2015-10-30 61 views
1
# #!/usr/local/bin/ruby 

puts "why doesn't this work??" 
pi = '' 
special = "[;\`'<>-]" 
regex = /[#{special.gsub(/./){|char| "\\#{char}"}}]/ 

pi = ARGV[0].to_s #takes in console argument to test 

if pi == '3.1415926535897932385' 
    puts "got it" 
end 
if pi =~ regex 
    puts "stop word" 
else 
    puts "incorrect" 
end 

所有我想要做的是測試PI變量是否包含任何停止的字符,如果是真的,打印「停用詞」,否則有它或分別不正確。我嘗試過十種方法。掃描,包括?線條,我覺得這是最好的路線。不知道爲什麼這個簡單的正則表達式匹配的代碼將無法正常工作

+0

當你自己輸入正則表達式中的特殊字符或者它是'gsub'的問題時它會失敗嗎? –

+0

反斜槓是一個特殊字符,可能需要兩個:「\\」我不記得它是否是紅寶石,但我認爲如果字符串然後將被放入正則表達式或其他東西,perl需要四個 – DGM

+0

沒有例子在你的問題如何失敗。請給我們提供一個簡單的輸入示例來說明問題,以及您希望代碼爲該輸入輸出的內容。 –

回答

0

你不需要逃避任何字符在字符類:

special = "[;\`'<>-]" 
regex = /#{special}/ 
p regex 

#pi = ARGV[0] #takes in console argument to test 
pi = 'hello;world' 

if pi == '3.1415926535897932385' 
    puts "got it" 
end 

if pi =~ regex 
    puts "stop word" 
else 
    puts "incorrect" 
end 

--output:-- 
/[;`'<>-]/ 
stop word 

而且ARGV[0]是一個字符串了。但是,一個shell /控制檯,當你在命令行中輸入他們也承認特殊字符:

special = "[;\`'<>-]" 
#regex = /[#{special.gsub(/./){|char| "\\#{char}"}}]/ 
regex = /#{special}/ 
p regex 

pi = ARGV[0] #takes in console argument to test 

if pi == '3.1415926535897932385' 
    puts "got it" 
end 

if pi =~ regex 
    puts "stop word" 
else 
    puts "incorrect" 
end 

--output:-- 
~/ruby_programs$ ruby 1.rb ; 
/[;`'<>-]/ 
incorrect 

~/ruby_programs$ ruby 1.rb < 
-bash: syntax error near unexpected token `newline' 

如果你想外殼/控制檯來對待它能夠識別的特殊字符 - 爲文字,那麼你必須引用他們。有多種方法來quote things in a shell/console

~/ruby_programs$ ruby 1.rb \; 
/[;`'<>-]/ 
stop word 

~/ruby_programs$ ruby 1.rb \< 
/[;`'<>-]/ 
stop word 

注意您可以使用String#[]太:

special = "[;\`'<>-]" 
regex = /#{special}/ 
... 
... 
if pi[regex] 
    puts "stop word" 
else 
    puts "incorrect" 
end 
1

我想你可能過度思考這一點。這裏有幾個方法(在許多),其中true意味着該字符串至少包含特殊字符之一):

#1

baddies = "[;`'<>-]" 

pi = '3.14' 
pi.delete(baddies).size < pi.size #=> false 

pi = '3.1;4' 
pi.delete(baddies).size < pi.size #=> true 

#2

special = %w| [ ; ` ' < > - ] | 
    # => ["[", ";", "`", "'", "<", ">", "-", "]"] 

pi = '3.14' 
(pi.chars & special).any? #=> false 

pi = '3.1cat4' 
(pi.chars & special).any? #=> false 

pi = '3.1;4' 
(pi.chars & special).any? #=> true 
相關問題