Tente com esta regex
select (.*?)[\r\n|\s]from
Na célula A1 de uma planilha do Excel, tenho o seguinte conteúdo dentro da célula:
select a.id, b.type, c.name
from blah a,
blah2 b,
blah3 c
where a.id = b.key
and b.key = c.id
;
Qualquer um dos abaixo são resultados desejados:
select 1 from
blah a,
blah2 b,
blah3 c
where a.id = b.key
and b.key = c.id
;
OR
select 1
from blah a,
blah2 b,
blah3 c
where a.id = b.key
and b.key = c.id
;
Eu tenho esse código vba
Dim objRegExp As New RegExp
objRegExp.Pattern = "select .+ from"
objRegExp.Global = True
objRegExp.MultiLine = True
regexpReplace =objRegExp.Replace(Trim(Worksheets("new").Range("A1").Value),"select 1 from")
MsgBox regexpReplace
Mas a caixa de mensagem está exibindo o texto exato da célula A1 (ou seja, sem substituição). Alguém sabe por que isso está acontecendo? Eu não serei capaz de substituir entre multilinhas.
Eu sei que meu código de regex está ok porque tentei alterar a célula A1 para o abaixo (e ele fez o substituto corretamente):
select a.id, b.type, c.name from
blah a,
blah2 b,
blah3 c
where a.id = b.key
and b.key = c.id
;
Tente com esta regex
select (.*?)[\r\n|\s]from
Seu problema é provavelmente porque .
não corresponde a novas linhas (não tenho certeza, mas .MultiLine
deveria ter alterado esse comportamento? Por alguma razão, pode não ter sido, então tente isso.).
Tente:
select.+\n*from
Ou talvez:
select.+\r\n*from
Melhor ainda:
select[\s\S]+from
Além disso:
select[\u0000-\uFFFF]+from
As duas primeiras médias correspondem a tudo, exceto as novas linhas, e também correspondem a novas linhas em uma posição específica. As duas últimas médias correspondem a tudo, incluindo novas linhas.
Existem dois problemas:
objRegExp.Pattern = "select\s.+\sfrom"
( \s
para corresponder ao espaço em branco, incluindo novas linhas) "select 1" & vbNewLine & "from"
para inserir a nova linha onde desejar Tags regex microsoft-excel macros vba