J'essaie de prendre une chaîne de texte comme ceci:
$string = "This (1) is (2) my (3) example (4) text";
Dans tous les cas où il y a un entier positif à l'intérieur des parenthèses, j'aimerais le remplacer par simplement l'entier lui-même.
Le code que j'utilise maintenant est:
$result = preg_replace("\((\d+)\)", "$0", $string);
Mais je continue à recevoir un
Le délimiteur ne doit pas être alphanumérique ni antislash.
Attention
Des pensées? Je sais qu'il y a d'autres questions ici qui répondent de la sorte à la question, mais ma connaissance de la regex ne suffit pas pour passer à cet exemple.
Tu es presque là. Vous utilisez:
$result = preg_replace("((\d+))", "$0", $string);
preg_*
de la fonction Doit être délimitée par une paire de délimiteurs Étant donné que vous n'utilisez pas de délimiteurs, vous obtenez cette erreur.(
et )
sont des méta-caractères dans une expression rationnelle, ce qui signifie qu'ils ont une signification spéciale .. Puisque vous voulez faire correspondre une parenthèse ouverte .__ avec une parenthèse fermée, vous devez les échapper à l'aide d'un \
. Tout ce qui suit \
est traité littéralement \d+
. Mais le nombre capturé Sera dans $1
et non pas $0
. $0
aura la correspondance entière, c'est-à-dire entier entre parenthèses.Si vous faites tous les changements ci-dessus, vous obtiendrez:
$result = preg_replace("#\((\d+)\)#", "$1", $string);
1) Vous devez avoir un délimiteur, le /
fonctionne bien.
2) Vous devez échapper aux caractères (
et )
pour éviter de penser qu'il s'agit d'un autre groupe.
3) De plus, les variables de remplacement commencent ici à 1 et non à 0 (0 contient la correspondance textuelle COMPLETE, qui inclurait les parenthèses).
$result = preg_replace("/\((\d+)\)/", "\\1", $string);
Quelque chose comme ça devrait marcher. Si vous avez d'autres questions, consultez la documentation preg_replace()
de PHP - c'est vraiment bon.
Vérifiez la documentation - vous devez utiliser un délimiteur avant et après votre modèle: "/\((\d+)\)/"
Vous voudrez également échapper aux parenthèses externes ci-dessus car elles sont littérales et non un groupe de correspondance imbriqué.
Le délimiteur ne doit pas être alphanumérique ni antislash.,
essayez de taper vos paramètres dans "/ .... /" comme indiqué ci-dessous. Sinon, le code sera généré >>> Le séparateur ne doit pas être alphanumérique ni antislash.
$yourString='hi there, good friend';
$dividorString='there';
$someSstring=preg_replace("/$dividorString/",'', $yourString);
echo($someSstring);
// hi, good friend
...__ a travaillé pour moi.
Essayer:
<?php
$string = "This (1) is (2) my (3) example (4) text";
$output = preg_replace('/\((\d)\)/i', '$1', $string);
echo $output;
?>
Les caractères entre parenthèses sont des caractères spéciaux dans une expression régulière. Vous devez leur échapper pour les utiliser.