ExcelシートのセルA1には、セル内に次の内容があります。
select a.id, b.type, c.name
from blah a,
blah2 b,
blah3 c
where a.id = b.key
and b.key = c.id
;
以下のいずれかが望ましい結果です。
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
;
私はこの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
ただし、メッセージボックスには、セルA1からの正確なテキストが表示されています(つまり、置換は行われません)。なぜこれが起こっているのか誰かが知っていますか?マルチライン間で置き換えることはできません。
セルA1を以下に変更しようとしたので、正規表現コードに問題がないことはわかっています(そして、正しく置き換えられました)。
select a.id, b.type, c.name from
blah a,
blah2 b,
blah3 c
where a.id = b.key
and b.key = c.id
;
あなたの問題はおそらく.
改行と一致しません(わかりませんが、.MultiLine
shouldその振る舞いを変更しましたか?何らかの理由で、持っていない可能性があるので、これを試してください。).
試してみてください:
select.+\n*from
または多分:
select.+\r\n*from
さらに良い:
select[\s\S]+from
また:
select[\u0000-\uFFFF]+from
最初の2つの平均は、改行を除くすべてに一致し、特定の位置の改行にも一致します。最後の2つの意味は、改行を含むすべてに一致します。
この正規表現で試してください
select (.*?)[\r\n|\s]from
2つの問題があります:
objRegExp.Pattern = "select\s.+\sfrom"
(\s
は、新しい行を含め、空白に一致します)"select 1" & vbNewLine & "from"
に変更して、必要な場所に新しい行を挿入します