2014-02-07 2 views
1

Я хочу захватить любое слово между двумя двоеточиями. Я пытался с этим (try on Rubular):Рубины захвата слов между двумя двоеточиями

(\:.*\:) 

Здравствуйте: Имя:

Что вы делаете сегодня,: название :?

$: name :, have a lovely: event :.

Он работает, кроме последней строки она захватывает это:

Match 3
1.: Имя :, есть прекрасный: событие:

Это получение споткнулся на вторая (закрывающая) двоеточие и третья (открывающая) двоеточие. Он должен фиксировать :name: и :event: отдельно на этой последней строке.

ответ

6

Вам нужно нежадное регулярное выражение:

(\:.*?\:) 

.*? будет соответствовать кратчайшей возможной строке, тогда как .* соответствует самой длинной найденной строке.

2
(\:[^:]*\:) 

[^:] означает «ничего, кроме ':'.

Пожалуйста, обратите внимание, что это выражение будет соответствовать "::" также

Здесь обновляется ваш Rubular ссылка:.. http://rubular.com/r/VtwhIqtbli

+0

Пожалуйста, знайте, что эта ехр будет соответствовать "::" также. –

3

Для любого слова между две колоны:

(?<=:)\b.*?\b(?=:) 

Rubular link

+0

** Это правильный ответ **. Он исключает окружающие двоеточия _ и пропускает нежелательную промежуточную информацию (например, «, есть прекрасный» в примере). – KChaloux

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