PHP Regex Sin Backslash
Pregunta
Así que no había hecho ningún expresiones regulares durante un tiempo, por lo que pensé en poner al día mi memoria. Estoy tratando de convertir una cadena como a*b*c
en a<b>b</b>c
. Ya he recibido ese trabajo, pero ahora quiero seguir una cadena como a\*b\*c
se convierta en a\<b>b\</b>c
, sino más bien, en a*b*c
. Aquí está el código que estoy utilizando ahora:
$string = preg_replace("/\*([\s\S]*?)\*/", "<b>$1</b>", $input);
He intentado poner esta \\\\{0}
antes de los asteriscos, y que no funcionó. Tampoco [^\\\\]
.
Solución
Trate de búsqueda hacia atrás negativo:
"/(?<!\\\\)\*([\s\S]*?)(?<!\\\\)\*/"
Esto sólo coincide con un *
si no está precedido por un \
.
Este es frágil, sin embargo; También sería un error si la cadena es escaped backslash \\*bold* text
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow