Подтвердить что ты не робот

Разделитель не должен быть буквенно-цифровым или обратным слэшем, а preg_match

У меня есть этот код:

$string1 = "My name is 'Kate' and im fine"; 
$pattern = "My name is '(.*)' and im fine"; 
preg_match($pattern , $string1, $matches);
echo $matches[1];

и когда im run, он возвращает эту ошибку:

Предупреждение: preg_match() [function.preg-match]: разделитель не должен быть буквенно-цифровым или обратным слэшем

4b9b3361

Ответ 1

Вам нужен разделитель для вашего шаблона. Он должен быть добавлен в начале и конце шаблона следующим образом:

$pattern = "/My name is '(.*)' and im fine/";  // With / as a delimeter 

Ответ 2

Решение (в других ответах не упоминается "mdash", по крайней мере, во время моего первоначального написания) заключается в том, что, когда PHP ссылается на разделители, это не относится к разделителям, которые вы видите в своем коде (которые являются метками кавычек) но следующие символы внутри строки. (На самом деле, я никогда не видел этого нигде в любой документации: вы должны увидеть его в примерах.) Поэтому вместо синтаксиса регулярных выражений, как вы привыкли к многим другим языкам:

/something/

PHP использует строки, а затем просматривает строку для другого:

'/something/'

Разделитель PHP ссылается на пару символов / вместо пары символов '. Поэтому, если вы пишете 'something', PHP будет принимать s в качестве предполагаемого разделителя и жалуется, что вам не разрешено использовать буквенно-цифровые символы в качестве разделителя.

Итак, если вы хотите передать (например) i, чтобы показать, что вы хотите совпадение с регистрацией, вы передаете его внутри строки, но вне разделителей регулярных выражений:

'/something/i'

Если вы хотите использовать в качестве разделителя что-то отличное от /, вы можете, например, если вы соответствуете URL-адресу и не хотите, чтобы он удалял все косые черты:

'~something~'

Ответ 3

Вы должны указать разделитель для своего выражения. Разделитель - это специальный символ, используемый в начале и в конце выражения для обозначения того, какая часть является выражением. Это позволяет использовать модификаторы и интерпретатор, чтобы знать, что является выражением и которые являются модификаторами. Как указано в сообщении об ошибке, разделитель не может быть обратным слэшем, потому что обратная косая черта является символом escape.

$pattern = "/My name is '(.*)' and im fine/";

и ниже того же примера, но с модификатором i, чтобы он не был чувствительным к регистру.

$pattern = "/My name is '(.*)' and im fine/i";

Как вы можете видеть, i находится за пределами косой черты и поэтому интерпретируется как модификатор.

Также помните, что если вы используете символ прямой косой черты (/) в качестве разделителя, вы должны затем избежать дальнейшего использования/в регулярном выражении, если оно присутствует.

Ответ 4

У шаблона должны быть разделители. Разделители могут быть косой чертой (/) или любыми не алфавитно-цифровыми символами (#, $, *,...). Примеры

$pattern = "/My name is '(.*)' and im fine/"; 
$pattern = "#My name is '(.*)' and im fine#";
$pattern = "@My name is '(.*)' and im [email protected]";  

Ответ 5

Попробуйте с этим

 $pattern = "/My name is '\(.*\)' and im fine/";