Php regex sem barragem
Pergunta
Então, eu não tinha feito nenhum regexps há um tempo, então pensei em aprimorar minha memória. Estou tentando converter uma string como a*b*c
em a<b>b</b>c
. Eu já consegui funcionar, mas agora quero manter uma corda como a\*b\*c
de se transformar em a\<b>b\</b>c
, mas sim em a*b*c
. Aqui está o código que estou usando agora:
$string = preg_replace("/\*([\s\S]*?)\*/", "<b>$1</b>", $input);
Eu tentei colocar isso \\\\{0}
Antes dos asteriscos, e isso não funcionou. Nem [^\\\\]
.
Solução
Experimente o visual negativo:
"/(?<!\\\\)\*([\s\S]*?)(?<!\\\\)\*/"
Isso só corresponde a um *
Se não for precedido por um \
.
Isso é quebradiço, no entanto; também falharia se a string for escaped backslash \\*bold* text
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow