Регулярное выражение для сопоставления слов, но не в том случае, если оно начинается или заканчивается дефисом или двоеточием

#regex #ruby

Вопрос:

У меня возникли проблемы с определением правильного регулярного выражения (в Ruby) для сопоставления слова в строке, но не в том случае, если слово начинается или заканчивается на - или : .

В настоящее время у меня есть:

 /bmatch thisb/i
 

Регулярное выражение должно совпадать ( match this ) в:

  please match this!
 do not match this.
 

но не совпадают:

 do not :match this
do not -match this
do not match this:
do not match this-
 

Я пытался:

 /b[^:-]match this[^:-]b/i
 

Я был бы признателен за любую помощь! Я использую регулярное выражение в Ruby, если это имеет значение.

Комментарии:

1. Я думаю, что вы имеете в виду сопоставление строки в строке, а не слова в строке, учитывая ваш пример. Приятно видеть, что ты понял, как это сделать. В качестве упражнения подумайте, как бы вы сопоставили строку, которая могла бы начинаться или заканчиваться знаком минус или двоеточием, но не могла бы одновременно начинаться с минуса или двоеточия и заканчиваться знаком минус или двоеточием.

Ответ №1:

Я думаю, что понял это, используя отрицательный взгляд сзади и отрицательный взгляд сверху

 /(?<![:-])bmatch thisb(?![:-])/i