は、私はIRBで、次のRubyのコードを持っている:これらの2つのほぼ同一のRuby正規表現パターンで異なる結果が表示されるのはなぜですか?また、一致しないと思われるものがあるのはなぜですか? Rubyの1.9.2を使用して
> r1 = /^(?=.*[\d])(?=.*[\W]).{8,20}$/i
> r2 = /^(?=.*\d)(?=.*\W).{8,20}$/i
> a = ["password", "1password", "password1", "pass1word", "password 1"]
> a.each {|p| puts "r1: #{r1.match(p) ? "+" : "-"} \"#{p}\"".ljust(25) + "r2: #{r2.match(p) ? "+" : "-"} \"#{p}\""}
これは、次の出力が生成されます。
r1: - "password" r2: - "password"
r1: + "1password" r2: - "1password"
r1: + "password1" r2: - "password1"
r1: + "pass1word" r2: - "pass1word"
r1: + "password 1" r2: + "password 1"
1)なぜ結果が異なるのですか?
2.)なぜr1
が文字列2、3、4で一致するのですか? (?=.*[\W])
lookaheadは、それらの例に単語以外の文字がないので失敗するでしょうか?
'/ ^(?=。* [\ d])(?=。*([\ W]))。{8,20} $/i'と一致するようにしてください。グループ「1」をキャプチャしていますか? (私はそれが数字だとは思いますが、あなたは決して知りません) –
Ruby 1.9.3-p327を使った結果:r1: - "password" r2: - "password" r1: - "1password" r2: - "1password" r1: - "password1" r2: - "password1" r1: - "pass1word" r2: - "pass1word" r1:+ "パスワード1" r2:+ "パスワード1" => ["password"、 "1password "、" password1 "、" pass1word "、" password 1 "] 1.9.2のバグを見つけたようですか? –
質問に含めてください(適切な書式設定のために) –