PHP preg_replace to turn **xyz** to <b>xyz</b>
Asked Answered
A

4

5

I decided to, for fun, make something similar to markdown. With my small experiences with Regular Expressions in the past, I know how extremely powerful they are, so they will be what I need.

So, if I have this string:

    Hello **bold** world

How can I use preg_replace to convert that to:

    Hello <b>bold</b> world

I assume something like this?

    $input = "Hello **bold** world";
    $output = preg_replace("/(\*\*).*?(\*\*/)", "<b></b>", $input);
Attorn answered 25/10, 2010 at 21:51 Comment(4)
It might be possible to do exactly what you asked in regular expressions but keep in mind that something like markdown shouldn't really be implemented using regular expressions. Joel Spolsky talks about this in one of the Stack Overflow podcasts. Look into finite state machines.Disaster
A link to the podcast: itc.conversationsnetwork.org/shows/detail4359.htmlLondoner
@Disaster Languages that can be handled by FSM's are regular; thus they can be handled by regexes.Typical
I guess since regexes basically generate FSMs on the fly then my argument is invalid :)Disaster
A
9

Close:

$input = "Hello **bold** world";
$output = preg_replace("/\*\*(.*?)\*\*/", "<b>$1</b>", $input);
Asphaltite answered 25/10, 2010 at 21:56 Comment(1)
Woheee! Thanks!!Conch
Z
2

I believe there is a PHP package for rendering Markdown. Rather than rolling your own, try using an existing set of code that's been written and tested.

Zinnia answered 25/10, 2010 at 21:59 Comment(0)
K
1

Mmm I guess this could work

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

You find all sequences **something** and then you substitute the entire sequence found with the bold tag and inside it (the $1) the first captured group (the brackets in the expression).

Kellby answered 25/10, 2010 at 22:0 Comment(0)
N
0
$output = preg_replace("/\*\*(.*?)\*\*/", "<b>$1</b>", $input);
Northumbria answered 25/10, 2010 at 22:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.