我已经在Stack Overflow中看到了一些关于它的问题,但仍然无法解决我的问题。我几乎在那里,但需要一些帮助。 我试图找到的模式是:
/SELECT.*\ncoalesce.*\(\n.*\)*) x
这意味着: SELECT,任何东西,换行符,合并,任何东西,(换行符,任何东西)*,)x
问题是,模式'(换行,什么)'应该发生0次或更多次,但是尽可能少,所以我尝试用{ - }替换*,将搜索转换为
/SELECT.*\ncoalesce.*\(\n.*\)\{-}) x
但它没有用。它根据需要不断选择一个大块而不是几个块。如果我使用数字而不是 - (例如{10})它适用于10行或更少行的块,但由于此数字可能会有所不同,我无法做到这一点。 有没有人有办法解决吗? 以下是我使用的文件示例:
INSERT INTO lattes.palavras_chave (palavra_chave_1,palavra_chave_2,palavra_chave_3,palavra_chave_4,palavra_chave_5,palavra_chave_6)
SELECT palavra_chave_1,palavra_chave_2,palavra_chave_3,palavra_chave_4,palavra_chave_5,palavra_chave_6 from (
SELECT
coalesce(T2.Loc.value('@PALAVRA-CHAVE-1','varchar(max)'),'') as palavra_chave_1 ,
coalesce(T2.Loc.value('@PALAVRA-CHAVE-2','varchar(max)'),'') as palavra_chave_2 ,
coalesce(T2.Loc.value('@PALAVRA-CHAVE-3','varchar(max)'),'') as palavra_chave_3 ,
coalesce(T2.Loc.value('@PALAVRA-CHAVE-4','varchar(max)'),'') as palavra_chave_4 ,
coalesce(T2.Loc.value('@PALAVRA-CHAVE-5','varchar(max)'),'') as palavra_chave_5 ,
coalesce(T2.Loc.value('@PALAVRA-CHAVE-6','varchar(max)'),'') as palavra_chave_6
,tx.data_modificacao as data_modificacao_xml
FROM lattes.curriculos_xml tx
CROSS APPLY arquivo.nodes('//PALAVRAS-CHAVE') as T2(Loc)
) x
group by
palavra_chave_1,
palavra_chave_2,
palavra_chave_3,
palavra_chave_4,
palavra_chave_5,
palavra_chave_6;
INSERT INTO lattes.area_do_conhecimento_1 (nome_grande_area_do_conhecimento,nome_da_area_do_conhecimento,nome_da_sub_area_do_conhecimento,nome_da_especialidade)
SELECT nome_grande_area_do_conhecimento,nome_da_area_do_conhecimento,nome_da_sub_area_do_conhecimento,nome_da_especialidade from (
SELECT
coalesce(T2.Loc.value('@NOME-GRANDE-AREA-DO-CONHECIMENTO','varchar(max)'),'') as nome_grande_area_do_conhecimento ,
coalesce(T2.Loc.value('@NOME-DA-AREA-DO-CONHECIMENTO','varchar(max)'),'') as nome_da_area_do_conhecimento ,
coalesce(T2.Loc.value('@NOME-DA-SUB-AREA-DO-CONHECIMENTO','varchar(max)'),'') as nome_da_sub_area_do_conhecimento ,
coalesce(T2.Loc.value('@NOME-DA-ESPECIALIDADE','varchar(max)'),'') as nome_da_especialidade
,tx.data_modificacao as data_modificacao_xml
FROM lattes.curriculos_xml tx
CROSS APPLY arquivo.nodes('//AREA-DO-CONHECIMENTO-1') as T2(Loc)
) x
group by
nome_grande_area_do_conhecimento,
nome_da_area_do_conhecimento,
nome_da_sub_area_do_conhecimento,
nome_da_especialidade;
谢谢。
答案 0 :(得分:2)
请注意,即使使用\{-\}
,您的群组中仍然会有贪婪的.*
。
尝试select.*\ncoalesce\_.\{-\}\n) x
答案 1 :(得分:2)
问题在于您\n.*
。 .*
在您的捕获组内贪婪。你可以通过切换到最后匹配你的\n
而不是这样来解决这个问题:
/SELECT.*\ncoalesce.*\n\(.*\n\)\{-}) x
或使用两个\{-}
:
/SELECT.*\ncoalesce.*\(\n.\{-}\)\{-}) x
或者通过将其替换为\_.
(我的推荐)来简化您的捕获组:
/SELECT.*\ncoalesce\_.\{-}) x
如需更多帮助,请参阅:
:h /\_.
:h /\{-