Я озадачен ошибкой "переполнения стека" - "нехватка стека (код ошибки приложения: 12246)", - которую я получаю в BBEdit при выполнении операции "заменить все" в поиске
(@article(((?!eprint|@article|@book).)*\r)*)pmid = {(.+)}((((?!eprint|@article|@book).)*\r)*(@|\r*\z))
и замена на
\1eprinttype = {pubmed}, eprint = {\4}\5
Я могу использовать эти же шаблоны вручную, выполняя поиск и замену по одному, без каких-либо ошибок, даже если совпадение больше не происходит. Я также могу избежать ошибки, работая с небольшими файлами.
Я подозреваю, что в этом виноват мой неэффективный и неаккуратный код регулярных выражений, и я был бы признателен за помощь эксперта в этом. Я пытаюсь найти все записи в библиографии BibLaTeX, которые еще не имеют поля eprint
, но имеют поле pmid
, и заменить поле pmid
соответствующей спецификацией электронной печати (используя eprint
и eprinttype
).
Обновление: После некоторых экспериментов я обнаружил, что другой подход - единственное, что я могу заставить работать. Поиск
(?(?=@article(.+\r)+eprint = {(.+\r)+}\r*)(?!)|(@article(.+\r)+)pmid = {(.+)}((.+\r)+}\r*))
и замена на
\3eprinttype = {pubmed}, eprint = {\5}\6
делает свое дело. Единственная проблема в том, что обратные ссылки хрупкие, но я не могу заставить именованных обратных ссылок работать в BBEdit.