View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001694 | Double Commander | Default | public | 2017-01-15 19:18 | 2020-11-30 07:43 |
Reporter | cordylus | Assigned To | Alexx2000 | ||
Priority | normal | Severity | major | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Projection | none | ETA | none | ||
Product Version | 0.7.7 | ||||
Target Version | 0.8.0 | Fixed in Version | 0.8.0 | ||
Summary | 0001694: Replace by in the Find files dialog should understand Regexp (\0, \1, \r, \n) when the appropriate checkbox is set | ||||
Description | Поиск по файлам с заменой: поиск по регулярному выражению работает, а замена только обычным текстом. Хотелось бы видеть замену с поддержкой захваченных групп и переносов строк, как и положено для замены с включенной галочкой Regular expression. Не уверен, что ставить - баг или feature. Оформляю все же как баг, т.к. интуитивно оно должно работать. В частности, только что испортил себе кучу файлов (хорошо, что их можно перекачать), попытавшись провести замену \r\n на \n | ||||
Tags | No tags attached. | ||||
Attached Files | ufindthread.pas.patch (411 bytes)
Index: src/ufindthread.pas =================================================================== --- src/ufindthread.pas (revision 7565) +++ src/ufindthread.pas (working copy) @@ -381,7 +381,7 @@ end; if bRegExp then - S := ReplaceRegExpr(SearchString, S, replaceString, False) + S := ReplaceRegExpr(SearchString, S, replaceString, True) else begin Include(Flags, rfReplaceAll); | ||||
Fixed in Revision | 7569 | ||||
Operating system | |||||
Widgetset | |||||
Architecture | |||||
|
Достаточно изменть один параметр, см. патч. Жаль только, для исправления переводов строк осталось непригодно - \n под Windows считается как \r\n, но и без этого полезно. |
|
cordylus, а использование кодов символов (\x0A на \x0D\x0A) не прокатывает? |
|
Skif_off, хорошая идея, но не помогло. Результаты экспериментов (под Windows): Find by: \r - находит \r \n - находит \n \x0A - находит \n Replace by: \r - заменяет на символ r \n - заменяет на \r\n \x0A - заменяет на символы x0A Выходит абсурдная ситуация: поиск с заменой \n на \n заменяет \r\n на \r\r\n. |
|
Похоже, \n работает как esc-последовательность, а не метасимвол регэкспов. И удваивание слэша не срабатывает. Какая-то логика в этом определённо должна быть, по идее в поле замены вообще нигде нельзя воткнуть всё, что придёт в голову. Задачу с заменой \r\n на \n, похоже, можно решить так: "(\r)(\n?)" на "$2". |
|
Да, так и правда получается, спасибо. А \n на \r\n - через замену "[^\r]\n" на "\n". Насчет странного поведения - я ещё проверил последнюю версию TRegExpr, так в ней и \n уже не работает, тоже на символ заменяет. А в той, что поставляется в комплекте с FPC - ещё работает. |
|
Вообще, использование метасимволов в строке замены мало где работает, если вообще работает. В текстовых редакторах есть отдельный режим поиска/замены, связанный с использованием esc-последовательностей, так и называется обычно. https://msdn.microsoft.com/ru-ru/library/h21280bw.aspx Т.е. получается, что сейчас становится правильнее, не смешивая регэкспы и esc-последовательности в кучу. То, что \n срабатывало, а \r - нет, результат "переходного периода"? Остаётся вопрос с встроенным текстовым редактором, но результата можно добиваться, учитывая нюансы (исключением [^<нечто>] и за счёт той же подстановки: тупо добавив в конце выражения что-то типа "(<нужное>?)" и обращаться к нему через "$n". |
Date Modified | Username | Field | Change |
---|---|---|---|
2017-01-15 19:18 | cordylus | New Issue | |
2017-05-16 11:34 | cordylus | File Added: ufindthread.pas.patch | |
2017-05-16 11:45 | cordylus | Note Added: 0002230 | |
2017-05-17 22:51 | Alexx2000 | Assigned To | => Alexx2000 |
2017-05-17 22:51 | Alexx2000 | Status | new => assigned |
2017-05-17 22:51 | Alexx2000 | Target Version | => 0.8.0 |
2017-05-17 22:53 | Alexx2000 | Fixed in Revision | => 7569 |
2017-05-17 22:53 | Alexx2000 | Status | assigned => resolved |
2017-05-17 22:53 | Alexx2000 | Fixed in Version | => 0.8.0 |
2017-05-17 22:53 | Alexx2000 | Resolution | open => fixed |
2017-05-18 06:24 | Skif_off | Note Added: 0002240 | |
2017-05-19 08:05 | cordylus | Note Added: 0002241 | |
2017-05-19 13:32 | Skif_off | Note Added: 0002242 | |
2017-05-20 02:47 | cordylus | Note Added: 0002244 | |
2017-05-20 16:18 | Skif_off | Note Added: 0002247 | |
2020-11-30 07:43 | Alexx2000 | Status | resolved => closed |