Сайт, на который вы ссылаетесь, myregexp.com, ориентирован на Java.
Java имеет специальную функцию для сопоставления точного шаблона без необходимости использования якорных символов.Это функция, которую использует myregexp.com.
В большинстве других языков, чтобы соответствовать точному шаблону, вам нужно было бы добавить символы привязки ^
и $
в начале и концешаблон соответственно, в противном случае регулярное выражение предполагает, что ему нужно только найти соответствующий шаблон где-то внутри строки, а не всю строку, являющуюся соответствием.
Это означает, что без привязок ваш шаблон будет соответствовать любой строке,любой длины, потому что, какой бы ни была строка, она будет где-то содержать совпадение «от нуля до пяти любого символа».
Так что в PHP, Perl и практически любом другом языке вам нужен ваш шаблончтобы выглядеть так:
/^.{0,5}$/
Объяснив все это, я хотел бы сделать одно заключительное замечание: этот конкретный паттерн на самом деле не обязательно должен быть регулярным выражением - вы можете достичь того же с помощью strlen()
.Кроме того, символ точки в регулярном выражении может работать не совсем так, как вы ожидаете: обычно он соответствует почти любому символу;некоторые символы, в том числе символы новой строки, по умолчанию исключаются, поэтому, если ваша строка содержит пять символов, но один из них - новая строка, вы не сможете выполнить регулярное выражение, если вы ожидаете, что оно пройдет.Имея это в виду, strlen()
будет более безопасным вариантом (или mb_strlen()
, если вы ожидаете иметь символы Юникода).
Если вам нужно сопоставить любой символ в регулярном выражении, иповедение точки по умолчанию недостаточно хорошее, есть два варианта: один из них - добавить модификатор s
в конце выражения (т.е. он становится /^.{0,5}$/s
).Модификатор s
указывает регулярному выражению включить символы новой строки в точку «любой символ».
Другой вариант (который полезен для языков, не поддерживающих модификатор s
), заключается в использованиивыражение и его отрицание вместе в символьном классе - например, [\s\S]
- вместо точки.\s
соответствует любому символу пробела, а \S
является отрицательным значением \s
, поэтому любой символ не соответствует \s
.Так что вместе в классе персонажей они соответствуют любому персонажу.Он более длинный и менее читаемый, чем точка, но в некоторых языках это единственный способ убедиться в этом.
Подробнее об этом можно узнать здесь: http://www.regular -expressions.info / dot.html
Надеюсь, это поможет.