Подтвердить что ты не робот

Строка слова регулярного выражения, исключая дефис

Мне нужно регулярное выражение, которое соответствует выражению, заканчивающемуся границей слова, но которое не рассматривает дефис как границу. т.е. получить все выражения, соответствующие

type ([a-z])\b

но не совпадают, например.

type a-1

перефразировать: мне нужен эквивалент оператора границы слова \b, который вместо использования символьного класса слов [A-Za-z0-9_] использует расширенный класс: [A-Za-z0-9_-]

4b9b3361

Ответ 1

Вы можете использовать для этого взгляд, самым коротким будет использование отрицательного вида:

type ([a-z])(?![\w-])

(?![\w-]) означает "сбой соответствия, если следующий символ находится в \w или является -".

Вот вариант, который использует обычный просмотр:

type ([a-z])(?=[^\w-]|$)

Вы можете читать (?=[^\w-]|$) как "только в том случае, если следующий символ не в классе символов [\w-], или это конец строки".

Посмотрите, как работает: http://www.rubular.com/r/NHYhv72znm

Ответ 2

У меня была довольно похожая проблема, но я не хотел рассматривать символ "*" как пограничный. Вот что я сделал:

\b(?<!\*)[^\s\*]+)\b(?!*)

В принципе, если вы находитесь на границе слова, оглянитесь назад на один символ и не совпадите, если предыдущий символ был "*". Если вы находитесь посередине, не соглашайтесь на пробел или звездочку. Если вы в конце, убедитесь, что конец не является звездочкой. В вашем случае, я думаю, вы могли бы использовать \w вместо\s. Для меня это работало в следующих ситуациях:

*word
wo*rd
word*