Code: Select all
.*\\(.*)\\.*\\.*
оставляет только 111 и там и там
заменить $1.*\\(.*)\\.*\\.*(\\)+[^\\].*
оставляет только 02 и там и там
а надо по разному
Code: Select all
.*\\(.*)\\.*\\.*
заменить $1.*\\(.*)\\.*\\.*(\\)+[^\\].*
Code: Select all
var paths = [
"C:\\02\\111\\папка\\",
"C:\\_02\\111\\папка\\файл.txt",
"C:\\02\\111\\",
"C:\\02\\",
"C:\\02"
];
for(var i = 0, l = paths.length; i < l; ++i) {
var p = paths[i];
paths[i] = p + " => " + getGrandparent(p);
}
WScript.Echo(paths.join("\n"));
function getGrandparent(path) {
if(/([^\\\/]+)([\\\/]+[^\\\/]+){2}[\\\/]*$/.test(path))
return RegExp.$1;
return undefined;
}
Code: Select all
line 1
line 2
line 3
line 4
Такой подход имеет смысл только когда регулярное выражение может совпасть с многострочным текстом, причём количество строк заранее неизвестно. На мой взгляд, такая ситуация возникает лишь при выполнении следующих двух условий одновременно:YuS wrote:А это потому, что фактически, поиск происходит не назад, а с начала и вперед... только совпадение ищется ближайшее перед курсором, далее ближайшее перед найденным и т.д.DV wrote:Поиск с регулярными выражениями вверх (назад) работает значительно медленнее, чем поиск вперёд (вниз).
Code: Select all
if (IsVariableMultiLineRegEx(regEx))
{
// ищем от начала файла - как сейчас
}
else
{
// ищем назад (снизу вверх)
}
Но ведь поиск вверх - это тот же самый цикл, только не от начала к концу, а от конца в начало. Утрируя, что-то вроде:Instructor wrote:DV
Поиск с регулярными выражениями вверх не реализован, поэтому поиск вверх работает так как описал YuS.
Code: Select all
for (nLine = bSearchUp ? nLinesCount - 1 : 0; bSearchUp ? nLine >= 0 : nLine < nLinesCount; bSearchUp ? --nLine : ++nLine)
{ ... }
Code: Select all
nLine = bSearchUp ? nLinesCount - 1 : 0
Code: Select all
nLine = bSearchUp ? nLinesCount - nNewLineCharCount - 1 : 0
Code: Select all
while ( bSearchUp ? (nLine >= nLinesToCheck - 1) : (nLine <= nEditMaxLine) )
Разве функция AE_FindText в AkelEdit.c не содержит тот самый цикл, о котором я говорю? Если модифицировать ciCount и ciCountEnd внутри while-цикла так, чтобы вначале диапазон поиска был в районе последней строки, затем предпоследней строки и т.д., разве мы не получим нужное поведение?Instructor wrote:DV
Сложность не в определении области цикла, а в самом механизме сравнения.
Code: Select all
(па)-\1
Code: Select all
абвг па-па абвг