以下に一致する正規表現マッチャーを持つことは可能ですか:一致する括弧の内側と外側の両方に正確にフォーマットされた部分文字列があるかどうかを知る必要があります(@ ... )
一致の例:
abc (@ abc )
abc (@ (& abc ) )
abc (& def (@ abc ) )
(& (& abc def ) (@ abc ) )
(& def (& abc ) (@ abc ) )
一致しない例:
abc
(@ abc )
abc (@ def )
abc (& abc)
編集: 正規表現をチェックするためのrspec仕様は次のとおりです。2つのテストのみが失敗します:
"(@ abc)abc"は一致する必要があります
"(@ abc)(@ abc)"は一致しないはずです
describe "regex" do
let(:regex) { /(.+).*\(@.*\1.*\)/ }
matches = ["abc (@ abc )", "(@ abc ) abc", "abc (@ (& abc ) )", "abc (@ (& abc ) )"]
no_matches = ["abc", "(@ abc )", "abc def", "abc abc", "abc (& abc)", "(@ abc ) (@ abc)"]
matches.each do |flow|
it "should match '#{flow}'" do
flow.should match regex
end
end
no_matches.each do |flow|
it "should not match '#{flow}'" do
flow.should_not match regex
end
end
end