2010-10-25 5 views
4

J'ai décidé, pour le plaisir, de faire quelque chose de similaire à markdown. Avec mes petites expériences avec les Expressions Régulières dans le passé, je sais à quel point elles sont puissantes, donc elles seront ce dont j'ai besoin.PHP preg_replace pour tourner ** xyz ** à <b>xyz</b>

Donc, si j'ai cette chaîne:

Hello **bold** world 

Comment puis-je utiliser preg_replace pour convertir en:

Hello <b>bold</b> world 

Je suppose quelque chose comme ça?

$input = "Hello **bold** world"; 
    $output = preg_replace("/(\*\*).*?(\*\*/)", "<b></b>", $input); 
+2

Il est peut-être possible de faire exactement ce que vous avez demandé dans les expressions régulières, mais gardez à l'esprit que quelque chose comme markdown ne devrait pas vraiment être implémenté en utilisant des expressions régulières. Joel Spolsky en parle dans l'un des podcasts de Stack Overflow. Regardez dans les machines à états finis. – emurano

+0

Un lien vers le podcast: http://itc.conversationsnetwork.org/shows/detail4359.html –

+0

@emurano Les langues qui peuvent être traitées par les FSM sont régulières; ainsi ils peuvent être manipulés par regexes. – NullUserException

Répondre

7

Fermer:

$input = "Hello **bold** world"; 
$output = preg_replace("/\*\*(.*?)\*\*/", "<b>$1</b>", $input); 
+0

Merci, mec! Exactement ce dont j'avais besoin! – Entity

2

Je crois qu'il ya un paquet de PHP pour le rendu Markdown. Plutôt que de lancer le vôtre, essayez d'utiliser un ensemble de code existant qui a été écrit et testé.

1

Mmm je suppose que cela pourrait fonctionner

$output = preg_replace('/\*\*(.*?)\*\*/', '<b>$1</b>', $input); 

Vous trouverez toutes les séquences **something** puis vous remplacez la séquence entière trouvé avec la balise gras et à l'intérieur (le $1) le premier groupe capturé (les crochets dans la expression).

0
$output = preg_replace("/\*\*(.*?)\*\*/", "<b>$1</b>", $input);