preg_match проблема с пробелами - PullRequest
0 голосов
/ 22 февраля 2011

Мне нужно написать регулярное выражение, но по какой-то причине я не могу получить \ s, чтобы найти пробел, я пытаюсь ....

$name = "a ";

if( preg_match('^[a-z]+\s$', $name)){
  echo "match";
} else {
  echo "no match";
}

Я также пытался

preg_match('^[a-z\s]+$');

и

preg_match('^[a-z]/\s/$');

У меня просто нет совпадений.Полное регулярное выражение должно содержать 1 или несколько строчных букв, затем пробел, затем заглавную букву, за которой следует одна или несколько строчных букв, но ....

preg_match('^[a-z]+\s[A-Z][a-z]+$');

не работает так, как я ожидалучебники, которые я видел по всему Интернету (точка сайта и т. д.).

Кто-нибудь пролил свет на это?

1 Ответ

7 голосов
/ 22 февраля 2011

Вы должны добавить разделители (документы) к выражениям:

$name = "a ";

if( preg_match('/^[a-z]+\s$/', $name)){
//              ^          ^
//              └----------┴----- here: slash as delimiter
  echo "match";
} else {
  echo "no match";
}

Здесь яиспользовал косую черту /, но вы в значительной степени свободны в выборе разделителя (хорошо, не так уж много: любой не алфавитно-цифровой, без обратной косой черты, без пробела ).


Убедитесь, что в отчете об ошибках установлено предупреждение, например, добавив error_reporting(E_ALL).Тогда вы бы увидели это предупреждение:

Предупреждение: preg_match (): не найдено конечного разделителя '^' в ... в строке ...
нет совпадений

PHP обрабатывает первый символ в строке как разделитель, поэтому в вашем случае ^.

...