Строки соответствия этих регулярных выражений длиной 1 и более.В выражениях (.)
представляет группу захвата, где точка должна быть заменена вашим классом символов, я полагаю (см. Гуру Unicode, хотя это не является целью вопроса).
контекст этого регулярного выражения - одна строка (модификатор /s
).Это позволяет точке соответствовать символам новой строки, а также чему-либо еще (например, [\s\S]
), чтобы можно было вставлять символы новой строки, а также быть самым удаленным из них.
Использование \z
аналогично $
(в режиме /s
), за исключением того, что \z
исправляет сценарий, в котором $
может соответствовать перед новой строкой (совпадения в конце строки более распространены).Если рассматриваемый символ является символом новой строки, и вы используете не жадный квантификатор (например, .*?
), а целевой строкой является «\ nasdf \ n \ n», он может ошибочно совпадать перед последним символом новой строки.Но это спорный вопрос, так как спички все жадные.Тем не менее, оставьте это для улыбок.
/^(?=(.)).*\1\z/s
расширенный
/
^ # Beginning of string
(?=(.)) # Lookahead - capture grp1, first (any) character (but don't consume it)
.* # Optionally consume all the characters up until before the last character
\1 # Backreference to capture grp1, this must exist
\z # End of string
/s # s modifier
Пример, предусматривающий только символы класса слов
/^(?=(\w)).*\1\z/s
Опять же, просто замените ваши приемлемые символы