Предоставление параметров для предварительного сопоставления - PullRequest
0 голосов
/ 23 марта 2012

У меня есть следующий php-код от php.net

<?php
// The "i" after the pattern delimiter indicates a case-insensitive search
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}
?>

Я не понимаю, почему они используют '/php/i' not ('php') для сопоставления. Пожалуйста, помогите мне. Спасибо

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Это так называемый синтаксис "регулярного выражения perl" , который зародился в Perl, но обычно используется во многих языках. Символы / отделяют регулярное выражение, а последний символ i является параметром , изменяющим поведение сопоставления - в этом случае говорят, что сопоставление должно быть без учета регистра, то есть совпадать со всеми строками, такими как "PHP" , "php", "PhP" и т. д.

Подробнее о регулярных выражениях вы можете прочитать в руководстве по PHP .

Если вы спрашиваете, почему они не используют пробелы вокруг - это зависит от того, что вы хотите найти. Я бы рекомендовал использовать /\bphp\b/i для сопоставления целых слов. \b означает «граница слова».

1 голос
/ 23 марта 2012

В регулярных выражениях PHP для функций preg_* (PCRE) используются разделители, как описано в руководстве по PHP .По сути, ваше выражение начинается и заканчивается с разделителя, а после разделителя вы можете поместить модификаторы.Модификатор i делает выражение нечувствительным к регистру.Другие модификаторы описаны здесь .

И если вы ищете фиксированную строку, вы должны использовать strpos .Это быстрее.

1 голос
/ 23 марта 2012

Вы можете написать / php /i, но это будет означать, что вы хотите, чтобы ваша строка "PHP" была окружена пробелами, что не является хорошей идеей и фактически провалит этот тест. запись /.../ - это способ написания регулярного выражения в стиле Perl. это просто /<pattern>/<flags> это все

...