У меня есть код, проверяющий строку от 1 до 32 символов, которая может содержать только альфа-числовые и дефисы ('-'), но не может начинаться или заканчиваться дефисом.Как регулярное выражение соответствует строке alnums и дефисов, но которая не начинается или не заканчивается дефисом?
Я использую регулярные выражения PCRE & PHP (хотя часть PHP в этом случае не очень важна).
Сейчас псевдо-код выглядит следующим образом:
if (match("/^[\p{L}0-9][\p{L}0-9-]{0,31}$/u", string)
and
not match("/-$/", string))
print "success!"
То есть, я проверяю первое, что строка правых содержания, не будучи с «-» и из правой длины, а затем я запускаю еще один тест, чтобы убедиться, что он не заканчивается символом «-».
Любые предложения по объединению этого в одно регулярное выражение PCRE?
Я пробовал использовать ожидания вперед/назад, но не смог заставить его работать.
Первое предложение хорошее и, кажется, передает все мои тесты, спасибо! Кстати, знаете ли вы, есть ли какие-то причины предпочесть друг другу? – shevron
@Shahar Evron: Существует реализация регулярных выражений, которые не поддерживают утверждения, основанные на взгляде или утверждениях вокруг взгляда. В таком случае хорошо знать альтернативу. – Gumbo