/ / Le délimiteur ne doit pas être alphanumérique ou barre oblique inverse et preg_match - php, regex, preg-match

Le délimiteur ne doit pas être alphanumérique ni antislash et preg_match - php, regex, preg-match

J'ai ce code:

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

et quand je l'exécute, il renvoie cette erreur:

Avertissement: preg_match () [function.preg-match]: le délimiteur ne doit pas être alphanumérique ni barre oblique inverse

Réponses:

93 pour la réponse № 1

Vous avez besoin d'un délimiteur pour votre modèle. Il doit être ajouté au début et à la fin du modèle comme suit:

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

37 pour la réponse № 2

La solution (à laquelle les autres réponses nemention - au moins au moment où j'écris à l'origine ceci) est que lorsque PHP fait référence aux délimiteurs, il ne s'agit pas des délimiteurs que vous voyez dans votre code (qui sont des guillemets) mais des caractères suivants à l'intérieur de la chaîne. En fait, je n'ai jamais vu cela déclaré nulle part dans aucune documentation: vous devez le voir dans les exemples.) Donc, au lieu d'avoir une syntaxe d'expression régulière comme celle à laquelle vous pouvez être habitué dans de nombreuses autres langues:

/something/

PHP utilise des chaînes, puis regarde à l'intérieur de la chaîne pour un autre délimiteur:

"/something/"

Le délimiteur auquel PHP fait référence est la paire de / caractères, au lieu de la paire de " personnages. Donc, si vous écrivez "something", PHP prendra s comme délimiteur prévu et vous plaignez que vous n'êtes pas autorisé à utiliser des caractères alphanumériques comme délimiteur.

Donc, si vous voulez passer (par exemple) un i pour montrer que vous voulez une correspondance insensible à la casse, vous la passez à l'intérieur de la chaîne mais à l'extérieur des délimiteurs d'expressions régulières:

"/something/i"

Si vous souhaitez utiliser autre chose que / comme délimiteur, vous pouvez, par exemple, si vous correspondez à une URL et que vous ne voulez pas avoir à échapper à toutes les barres obliques:

"~something~"

18 pour la réponse № 3

Vous devez spécifier un délimiteur pour votre expression. Un délimiteur est un caractère spécial utilisé au début et à la fin de votre expression pour indiquer quelle partie est l'expression. Cela vous permet d'utiliser des modificateurs et l'interpréteur pour savoir ce qu'est une expression et quels sont les modificateurs. Comme l'indique le message d'erreur, le délimiteur ne peut pas être une barre oblique inverse car la barre oblique inverse est le caractère d'échappement.

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

et en dessous du même exemple mais avec le i modificateur pour correspondre sans être sensible à la casse.

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

Comme vous pouvez le voir, le i est en dehors des barres obliques et est donc interprété comme un modificateur.

Gardez également à l'esprit que si vous utilisez un caractère barre oblique (/) comme délimiteur, vous devez alors échapper à d'autres utilisations de / dans l'expression régulière, si elle est présente.


5 pour la réponse № 4

Le modèle doit avoir des délimiteurs. Les délimiteurs peuvent être une barre oblique (/) ou tout caractère non alphanumérique (#, $, *, ...). Exemples

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

1 pour la réponse № 5

S'il vous plaît essayer avec cela

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