1

So I hadn't done any regexps for a while, so I thought I'd brush up on my memory. I'm trying to convert a string like a*b*c into a<b>b</b>c. I've already gotten that working, but now I want to keep a string like a\*b\*c from turning into a\<b>b\</b>c, but rather, into a*b*c. Here's the code I'm using now:

     $string = preg_replace("/\*([\s\S]*?)\*/", "<b>$1</b>", $input);

I've tried putting this \\\\{0} in before the asterisks, and that didn't work. Neither did [^\\\\].

1 Answer 1

2

Try negative lookbehind:

"/(?<!\\\\)\*([\s\S]*?)(?<!\\\\)\*/"

This only matches a * if it's not preceded by a \.

This is brittle, though; it would also fail if the string is escaped backslash \\*bold* text.

Sign up to request clarification or add additional context in comments.

3 Comments

I get an error when trying that: Warning: preg_replace() [function.preg-replace]: Compilation failed: missing ) at offset 26
When I use four backslashes, instead of two, it works exactly like I need it to! Thanks!
Ah yes, right. You do need four backslashes - I have corrected my answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.