Substituição simples
A substituição de strings é freqüentemente usada como uma forma de aplicar modelos. Você pode substituir "%a:test"
com "~~test~~"
usando a expressão regular: %a:(w+)
, substituindo-o “~~$1~~”
.
Tentando escapar
O único problema agora é que não posso usar “%a:”
mais nada dentro da minha string. Isso poderia ser resolvido permitindo o escape usando a barra invertida. No regexp podemos usar um lookbehind negativa para ver se o caractere antes do% não é uma barra invertida: (?<!\)%a:(w+)
.
Fugindo da fuga
Agora estamos perto, porém agora não é possível usar em “%:a”
qualquer lugar. Precisamos ser capazes de escapar da barra invertida também. Poderíamos afirmar que o problema precisa corresponder a% a se não houver um número ímpar de barras invertidas na frente dele. Verificar se há um número ímpar em um lookbehind negativo não é possível, infelizmente, então precisamos colocar as barras invertidas na correspondência. Podemos dizer: corresponda a 0 ou mais pares de barras invertidas, seguido por “%a:”
, se não houver barra invertida na frente dele. Isso resulta em regexp:, (?<!\)((?:\{2})*+)%a:(w+)
substituindo-o por “$1~~$2~~”
.
Para terminar
A única coisa é isso %
e \
ainda será exibido assim. Isso pode ser resolvido simplesmente com um str_replace
.