Детали реализации регулярного выражения

Devtools отключит кэширование, чтобы обновление файла шаблона могло быть пересмотрено, когда его необходимо будет отрендерить.

Когда ваше приложение запускается в процессе JVM, ничто не указывает на ваши исходные файлы, и оно может видеть только путь к классу. Поэтому любые изменения, которые вы вносите в исходный файл, должны быть обновлены в соответствии с расположением пути к классу, что обычно происходит при запросе вашей IDE «Построить проект».

Таким образом, пропущенный шаг для шаблона заключается в том, что, и если в документации нет ясности по этому поводу, не стесняйтесь открывать вопрос с предложением, поскольку мы много раз повторяли это.

Хотя в i18n нет ничего конкретного. Если вы измените их и обновите путь к классу, мы перезапустим приложение, а не подберем его так же, как для шаблонов. Мы действительно пытались поддержать это один раз, см. этот вопрос для более подробной информации . Сказав это, вы не должны ожидать, что изменение файла ресурсов "просто сработает". Изменение конфигурации, очевидно, потребует, например, перезапуска приложения (опять же, путем обновления пути к классам при использовании devtools).

Некоторые добавленные примечания о поддержке IDE:

  • Eclipse постепенно компилирует и копирует измененные файлы в «save». Поэтому, если вы сохраните свой шаблон, вам будет хорошо идти
  • IntelliJ IDEA Ultimate имеет выделенную поддержку devtools по состоянию на 2018.1 - если вы настроите «Отключение по фрейму» на «Обновление ресурсов», это будет делать правильные вещи, когда вы переключаетесь на свой браузер. До этой поддержки у меня было специальное нажатие клавиши, сопоставленное «Build Project» (инкрементно компилирует и копирует ресурсы), которое я вызывал всякий раз, когда хотел, чтобы мои изменения были отражены

Если вы не используете IDE, вам нужно что-то, чтобы обновить classpath для вас. Мы пытались поддержать это из коробки, но оказалось довольно сложно. Есть комментарий, который поможет вам, если вы используете Gradle .

13
задан Community 23 May 2017 в 12:33
поделиться

3 ответа

Модуль Python re был основан на PCRE , но перешел на собственную реализацию.

Вот ссылка на C код .

Похоже, что библиотека основана на рекурсивном отслеживании с возвратом, когда был выбран неверный путь.

alt text

Регулярное выражение и размер текста n
a? n a n соответствует n

Имейте в виду, что этот график не является представителем обычного поиска по регулярным выражениям.

http://swtch.com /~rsc/regexp/regexp1.html

18
ответ дан 1 December 2019 в 21:12
поделиться

Нет никаких "гарантий эффективности" для Python RE не больше, чем для любой другой части языка (стандартная библиотека C ++ - единственный известный мне широко распространенный языковой стандарт, который пытается установить такие стандарты - но нет никаких стандартов, даже в C ++, указывающих, что, скажем, умножение двух целых чисел должно занимать постоянное время или что-то в этом роде); также нет никакой гарантии, что большие оптимизации не будут применены в любое время.

Сегодня Ф. Лунд (первоначально отвечавший за реализацию текущего модуля RE Python и т.д.), представляя Unladen Swallow на Pycon Italia, упомянул, что один из проспекты они ' Я буду изучать, как скомпилировать регулярные выражения непосредственно в промежуточный код LLVM (а не в их собственный байт-код, который будет интерпретироваться специальной средой выполнения), поскольку обычный код Python также компилируется в LLVM (в скором выпуске Unladen Swallow), RE и окружающий его код Python могут быть оптимизированы вместе, даже иногда довольно агрессивными способами. Я сомневаюсь, что что-то подобное очень скоро будет хоть сколько-нибудь близко к "готовому к производству"; -).

7
ответ дан 1 December 2019 в 21:12
поделиться

Сопоставление регулярных выражений с обратными ссылками является NP-сложной задачей , которая, по крайней мере, так же сложна, как NP-Complete . По сути, это означает, что это так же сложно, как и любая проблема, с которой вы, вероятно, столкнетесь, и большинство компьютерных ученых считают, что в худшем случае может потребоваться экспоненциальное время. Если бы вы могли сопоставить такие «регулярные» выражения (которые на самом деле не являются техническими) за полиномиальное время, вы могли бы выиграть миллион долларов .

2
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: