2010-09-12 4 views
1

У меня есть этот список:Помощь при захвате с регулярным выражением

foo chef.rb baz 
bar cucumber.rb bar 
baz gem.rb foo 

Я хочу, чтобы захватить все имена без .rb.

Мой текущий регулярное выражение выглядит следующим образом:

/([^\s](?:.)*?.(?:rb))/i 

Но он захватывает .RB тоже.

Как получить только базовое имя?

Спасибо.

ответ

2

Используйте это регулярное выражение вместо:

/(\w*?)\.rb\s*.*/i 

И имя базового ваша будет в 1-й группе захвата.

См. Его на rubular.

+0

'?' Не удастся выполнить команду "file.rblol.rb". Должно быть '/ (. *) \. Rb/i' – Nakilon

+0

Хм, странно, он должен работать, я не знаю, почему он сбросил первую букву в basename: hef, ucumber, gem, it и т. Д. –

+0

@Nakilon Исправлено, что – NullUserException

0

Это немного проще: /(\S+).rb(?:$|\s)/

Любой не-космические символы с последующим .rb следует либо в конце линии или пространства.

Смежные вопросы