문제

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 [^\\\\].

도움이 되었습니까?

해결책

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top