山口です。

yama@JPC20316739:/tmp$ uname -a
CYGWIN_NT-6.1 JPC20316739 2.8.0(0.309/5/3) 2017-04-01 20:47 x86_64 
Cygwin
yama@JPC20316739:/tmp$ ruby --version
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-cygwin]

の環境で、

yama@JPC20316739:/tmp$ cat regexp.rb
input=["ls"             ,\
       " ls  "          ,\
       "ls  "           ,\
       "ls>"            ,\
       "ls>tako"        ,\
       "ls > tako"      ,\
       "ls>tako ika"    ,\
       " cd" ]

input.each do |pattern|
  case pattern
  when /^ *ls *>? *(?<f>[^>]*) *$/
    wfname = $~[:f]
    puts "match: #{wfname}      pattern:\"#{pattern}\""
  else
    puts "not match             pattern:\"#{pattern}\""
  end
end

を実行すると、

yama@JPC20316739:/tmp$ ruby regexp.rb
match:       pattern:"ls"
match:       pattern:" ls  "
match:       pattern:"ls  "
match:       pattern:"ls>"
match: tako      pattern:"ls>tako"
match: tako      pattern:"ls > tako"
match: tako ika      pattern:"ls>tako ika"
not match             pattern:" cd"

のようになるのですが、
”ls>” や “ls> tako ika” を
マッチさせない正規表現の記述方法をご教示いただけないでしょうか?
若しくはもっとスマートな記述があれば、ご教示いただけると幸いです。