
Допустим, у меня есть такой текст:
models/players/clonespac/CloneTorsoLieutenant
{
q3map_nolightmap
q3map_onlyvertexlighting
{
map models/players/clonespac/CloneTorsoLieutenant
blendFunc GL_ONE GL_ZERO
rgbGen lightingDiffuse
}
{
map gfx/effects/clone
blendFunc GL_DST_COLOR GL_SRC_COLOR
tcGen environment
blendFunc GL_SRC_ALPHA GL_ONE
detail
alphaGen lightingSpecular
}
}
и я хочупреобразовать все буквы в строчные, но только если строка содержит слово«модели».
В результате получается следующее:
models/players/clonespac/clonetorsolieutenant
{
q3map_nolightmap
q3map_onlyvertexlighting
{
map models/players/clonespac/clonetorsolieutenant
blendFunc GL_ONE GL_ZERO
rgbGen lightingDiffuse
}
{
map gfx/effects/clone
blendFunc GL_DST_COLOR GL_SRC_COLOR
tcGen environment
blendFunc GL_SRC_ALPHA GL_ONE
detail
alphaGen lightingSpecular
}
}
Я знаю, что могу это сделать:
(\w)
-> \L$1
но это заменит все символы.
Я попробовал сделать это так:
models (\w)
-> models \L$1
но любые подобные попытки терпят неудачу.
решение1
Вы можете использовать:
^.*?[Mm]odels.*?$
Эксплантация:
^
- соответствует началу строки.*?
- что угодно, нежадное, после и перед словом, которое вы ищете[Mm]odels
- без учета регистраmodels
. Оберните его в\b
s, чтобы гарантировать, что egsomeothermodels
не будет соответствовать.$
- конец линии
Затем замените на:
\L$0
что в движке регулярных выражений Boost, используемом Notepad++/Sublime Text 3, означает, что \L
все последующее будет переведено в нижний регистр и $0
будет полным совпадением, то есть все совпадающие строки.