Я пытался угадать ваше намерение, но это было непросто:
(?=[a-z0-9-]{1,63})
этот внешний вид, похоже, требует, чтобы следующее до 63 символов было строчными буквами ASCII или цифрами, но на самом деле это будет успешным, даже если есть только одна буква, за которой следует что-либо. Поэтому, возможно, вы имели в виду (?=[a-z0-9-]{1,63}$)
, чтобы запретить что-либо еще после законного до 63 символов.
Возможно, вам нужны группы по меньшей мере одной буквы или цифры между -
, но вы сделали необязательным необязательное создание ограничения и возможности для многих возможностей, которые создали накладные расходы вашего выражения. Вы можете просто сказать: ([a-z0-9]++-){0,63}[a-z0-9]+
. Группы в фигурных скобках требуют, по меньшей мере, одной буквы или номера и требуют минуса после этого, выражение в конце требует по крайней мере одной буквы или номера в конце выражения, но также будет соответствовать последней группе без следующего -
на в то же время. Эта последняя группа также может быть единственной, если в вашем тексте не содержится -
.
Поместив это все вместе, вы создадите: (?=[a-z0-9-]{1,63}$)([a-z0-9]++-){0,63}[a-z0-9]+
. Обратите внимание, что вам не нужен ведущий ^
или задний $
, если вы используете метод matches
; это уже означает, что границы строк должны соответствовать границам выражений.
Я надеюсь, что я получил ваше намерение правильно ...
установлено, что:) ... –
Рассматривая ваше регулярное выражение, возможно, вам нужно/нужно проанализировать строку вручную. –
Чрезмерная учетная запись. Ваше регулярное выражение слишком сложно. Разберите вручную, как сказал @LuiggiMendoza. –