2014-01-22 6 views
1

Я думаю, что я слишком долго смотрел на php, я не могу на всю жизнь понять, почему это не работает.Простая ошибка в php regex preg_match

Я пытаюсь сопоставить номера телефонов с этим форматом (555.555.5555).

if (preg_match("[0-9]{3}.[0-9]{3}.[0-9]{4}", "555.555.5555", $matches)){ 
    echo matches[0]; 
} 

Моя первая мысль - это интересно. нужно сбежать первым или мне просто не хватает чего-то невероятно простого

+0

Что не работает? – Kermit

ответ

2

Для регулярного выражения вам нужен delimiter. / или #. Разделитель используется для отделения регулярного выражения от возможного modifiers.

if (preg_match("/[0-9]{3}\.[0-9]{3}\.[0-9]{4}/", "555.555.5555", $matches)){ 
    echo matches[0]; 
} 

Я также изменил точки на \. поскольку . является каждый символ (кроме новой линии, благодаря @Amal Murali в комментариях), \. только точка.

+0

Я видел это в нескольких примерах и думал, что это моя проблема. Он не появился во всех примерах, так что в чем цель/и зачем мне это нужно? – ladyoftime315

+0

Он сообщает парсеру, где начинается и заканчивается регулярное выражение. Вы можете добавить некоторые модификаторы после закрывающего разделителя, как описано на http://php.net/manual/en/reference.pcre.pattern.modifiers.php – Reeno

+0

Спасибо большое, достаточно просто. – ladyoftime315

1

Если не экранированный, символ точки (.) соответствует любому символу (кроме новой строки). Если вы хотите, чтобы соответствовать буквальное . характер, вам нужно, чтобы избежать его с обратной косой черты - так что вам необходимо написать \.

Кроме того, необходимо, чтобы обернуть его в действительной delimiters, как /. Разделителем может быть любой символ, не являющийся буквенно-цифровым, без обратного слэш-символа. ~, #, / и т. Д. Являются одними из наиболее часто используемых разделителей. Я использую прямой слэш здесь:

if (preg_match("/[0-9]{3}\.[0-9]{3}\.[0-9]{4}/", "555.555.5555", $matches)){ 
    echo $matches[0]; 
} 

Выход:

555.555.5555 
Смежные вопросы