Member 13605567 Ответов: 2

В чем разница между этим '/ /' и этим '~ ~' и этим '# #' в регулярных выражениях PHP?


Здравствуйте я забыл где я это нашел но я столкнулся с этими 3 примерами которые мне очень нравятся
смущенные тем, что они производят один и тот же результат. Означают ли эти 3 примера одно и то же?
В чем разница между ними всеми? И я знаком с последним, но не с двумя другими.

<?php
$string = 'I have 2 dogs.';
if(preg_match('~\d~',$string))
{
echo 'The string above contains a numeric character.';
}
else
{
echo 'The string above does not contain a numeric character.';
}
?>


<?php
$string = 'I have 2 dogs.';
if(preg_match('#\d#',$string))
{
echo 'The string above contains a numeric character.';
}
else
{
echo 'The string above does not contain a numeric character.';
}
?>


<?php
$string = 'I have 2 dogs.';
if(preg_match('/\d/',$string))
{
echo 'The string above contains a numeric character.';
}
else
{
echo 'The string above does not contain a numeric character.';
}
?>


Что я уже пробовал:

У Google не было того, что я искал, поэтому я подумал, что получу прямой ответ здесь.

2 Ответов

Рейтинг:
0

Thomas Daniels

Символы в начале и в конце являются ограничители (preg_match требует их), и шаблон находится внутри разделителей.

PHP: разделители - руководство пользователя[^]

Цитата:
При использовании функций PCRE требуется, чтобы шаблон был заключен в разделители. Разделителем может быть любой не буквенно-цифровой, не обратный слэш, не пробел.

Часто используемые разделители-это косая черта (/), хэш-знаки (#) и Тильды (~).

Итак, чтобы ответить на ваш вопрос "в чем разница?": разница заключается только в разделителях, сами шаблоны не имеют никакой разницы.

Но какова цель разрешения выбора разделителя? Это также объясняется в руководстве, которое я связал выше:
Цитата:
Если разделитель должен быть согласован внутри шаблона, он должен быть экранирован с помощью обратной косой черты. Если разделитель часто появляется внутри шаблона, рекомендуется выбрать другой разделитель, чтобы повысить читабельность.


Рейтинг:
0

Patrice T

Цитата:
Привет, я забыл, где я это нашел, но я столкнулся с этими 3 примерами, которые меня очень смущают, потому что они производят один и тот же результат.

И что же это за выход такой?
Если выводится "строка выше не содержит числового символа", то для меня это выглядит совершенно нормально.
Насколько я вижу, эти символы не являются контролем регулярных выражений, они просто совпадают, как и любые другие символы.

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Member 13605567

Но разве вам не нужно вставлять выражение между открывающим и закрывающим символами, как эти, с прямыми косыми чертами, я думал, что читал кое-где, что вам нужны прямые косые черты, чтобы показать, что именно там находится код регулярного выражения. Другими словами, в других примерах нет этих прямых косых черт. Таким образом, прямые косые черты не нужны в регулярных выражениях, чтобы символизировать, что этот раздел находится там, где строится код регулярных выражений?

Patrice T

Каждый язык обрабатывает регулярное выражение по-своему. Некоторые из них представляют собой простую строку, другие-специальные символы, в зависимости от языка.
Читайте документацию, смотрите образцы.