def split_after_start_string(str, *start_strings)
a = str.split(/(?<=\A#{start_strings.join('|')})/)
if a.size == 2
a
elsif start_strings.include?(str)
a << ''
else
nil
end
end
start_strings = %w| P RO RPX | #=> ["P", "RO", "RPX"]
split_after_start_string('PIXR', *start_strings) #=> ["P", "IXR"]
split_after_start_string('IPXR', *start_strings) #=> nil
split_after_start_string('ROXP', *start_strings) #=> ["RO", "XP"]
split_after_start_string('RPX', *start_strings) #=> ["RPX", ""]
正規表現は、「正の後読みの文字列の先頭にマッチstart_stringx
の一つの要素」を、読み込みます。例のsmart_strings
の場合、正規表現は次のようになります。
/(?<=\A#{start_strings.join('|')})/ #=> /(?<=\AP|RO|RPX)/