でこの正規表現を使用して、提供された例と一致し、偶発的な一致を防ぐ
/\b[A-Z]\d+(\.\d+)*\b/i
\ bメタ文字は、別の識別子の真中でのマッチングを防ぎます。 \ dメタ文字は任意の数字と一致し、複数の数字シーケンスはオプションの繰り返しで処理されます。最後の/ iは大文字と小文字のマッチングを可能にしますが、文字クラスでそれらをすべて指定する必要はありません。
このサンプルRubyプログラムは、既知の例だけでなく、不正な形式の例で正規表現をテストします。この場合の「峠」は正規表現式を見つけた、または予想されるように失敗するかのいずれかを意味することを
> ruby regex-test.rb
Pass: 'A12'
Pass: 'A12.25'
Pass: 'F12.23.36'
Pass: 'G45.36'
Pass: 'H475'
Pass: 'A12.12.122'
Pass: 'C1.20.23'
Pass: 'C.4'
Pass: 'BB9'
Pass: '123'
Pass: '1.F'
Pass: '8CF'
Pass: 'D3D'
注:
data = [
[ "A12", true ],
[ "A12.25", true ],
[ "F12.23.36", true ],
[ "G45.36", true ],
[ "H475", true ],
[ "A12.12.122", true ],
[ "C1.20.23", true ],
[ "C.4", false ],
[ "BB9", false ],
[ "123", false ],
[ "1.F", false ],
[ "8CF", false ],
[ "D3D", false ]
]
data.each do |pair|
puts "#{pair[1] == !(pair[0] =~ /\b[A-Z]\d+(\.\d+)*\b/i).nil? ? 'Pass' : 'Fail'}: '#{pair[0]}'"
end
このプログラムを実行した後、それは次の出力が表示されます。 data
配列内の各ペアの2番目の要素は、正規表現が一致するかどうかを判断し、正規表現が一致しない場合は、合致しない場合は '合格'が発生します。
行内の2つのバックスラッシュがバックスラッシュを指定していることがわかります。したがって、正規表現は何のためにも全く機能しません。 RegExpコンストラクタに渡す文字列として書き込むときにだけバックスラッシュをエスケープする必要があります。 '\\。 'という構造体はバックスラッシュの後ろに任意の文字を続けます。これはあなたが望むものではありません。 –
あなたはどのような文字の組み合わせを取得しようとしていますか?これは何のために必要なのですか、何を制限していますか? –
@torazaburoええ、私は質問を書いていたときにプレビューに表示されていなかったので、バックスラッシュを含める必要があると考えました。 – Nishant