2010-12-01 1 views
1

Moi et mon équipe sommes bloqués sur celui-ci, j'ai le code suivant.Quel délimiteur utiliser pour preg_replace en PHP (remplacer le travail en dehors de PHP mais pas à l'intérieur)

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut bibendum augue eu arcu mollis cursus. Curabitur nec purus ipsum. Fusce ut erat leo, vitae malesuada lacus. Quisque varius gravida justo ut aliquam. Integer accumsan, ante non volutpat semper, orci sem luctus odio, sit amet convallis odio justo id nisl. Nunc sed lacus nisi, quis accumsan massa. Donec ante enim, fermentum sit amet placerat nec, eleifend elementum nibh 

[[BLOGIMAGE_20090303011757.jpg||480]] 

us dolor nec est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam accumsan blandit purus eget vestibulum. Nullam neque sem, suscipit sit amet mattis eu, imperdiet quis ligula. Integer aliquam dapibus gravida. Pellentesque ultrices sapien orci. Suspendisse at eros non dolor accumsan cursus mattis nec justo. 

[[BLOGIMAGE_20090303011819.jpg||480]] 

Aenean cursus lacinia arcu vitae malesuada. Fusce fermentum enim sit amet elit fermentum at consectetur ante vulputate. Aliquam sagittis nulla id magna facilisis tempus. Suspendisse eget feugiat libero. Pellentesque non lorem sem, eu posuere velit. Nulla id nulla ligula. 

[[BLOGIMAGE_20090303011842.jpg||480]] ..... etc"; 
$pat = "\[\[(.*)\|\|(.*)\]\]"; 
$mat = '<img src="/path/to/file/imgs/$1" width="$2px" />'; 
$text = preg_replace($pat , $mat, $text); 

Ce que nous voulons faire est de convertir le [[imagefile || taille]] dans l'étiquette d'image en utilisant la structure dans le $ tapis. Le match fonctionne parfaitement dans RegExr (un programme d'adobe air), et javascript verious testeurs en ligne

L'erreur que je reçois est: -

Message: preg_replace() [function.preg-remplacement] :. Délimiteur ne doit pas être alphanumérique ou backslash

donc, si j'ajoute un dilimiter, comme ...

pat $ = «^[[() \ | \ | (.)]]^";

Puis le match des arrêts de travail, mais je ne reçois aucune erreur

Toute aide serait vraiment appréciée

Répondre

11

.. preg_replace() requiert un caractère délimiteur:

preg_replace("/$pat/" ... 

Traditionnellement, il s'agit de la barre oblique, mais il peut s'agir de n'importe quel caractère - en particulier lorsque vous avez besoin de la barre oblique dans la regex elle-même, vous pouvez recourir à un autre caractère.

Cette flexibilité vous permet d'exprimer "/http:\/\/foo\/bar\//" ("syndrome du cure-dent penchée") comme "!http://foo/bar/!".

Le caractère délimiteur est nécessaire de séparer l'expression rationnelle des drapeaux regex (« modificateurs » appelés également), par exemple:

preg_replace("/$pat/i" ... 

... celui-ci utilise le drapeau i de déclarer un regex insensible à la casse.

+0

Merci beaucoup, ça a trié tout cela et maintenant tout est logique. Il échouait aussi parce que les tuyaux étaient | | ... donc c'est bon de voir aussi la source =) –

0

essayer

$pat = "/\[\[(.*)\|\|(.*)\]\]/m"; 
5

De l'PHP manual on PCRE delimiters:

Un séparateur peut être un non-alphanumérique, non backslash, le caractère non-espace.

Les délimiteurs souvent utilisés sont des barres obliques (/), des marques de hachage (#) et des tildes (~).

Vous pouvez utiliser / comme séparateur pour séparer le motif de option modifiers:

/\[\[(.*)\|\|(.*)\]\]/ 

Mais aussi noter:

En plus des délimiteurs mentionnés ci-dessus, il est également possible de utiliser des délimiteurs de style de parenthèse où les parenthèses d'ouverture et de fermeture sont les délimiteurs de début et de fin, respectivement.

En outre, votre modèle correspondra autant que possible car les deux quantifiers sont gourmands; vous voudrez peut-être les changer pour ne pas correspondre le moins possible:

/\[\[(.*?)\|\|(.*?)\]\]/ 
Questions connexes