Как Вы указали в своем вопросе, который это зарегистрированное поведение . Я все еще нахожу его странным все же. Я использую, чтобы повторно заполнить тестовую базу данных и даже при том, что я не полагаюсь на значения полей идентификационных данных, это было немного раздражения для имения различных значений при заполнении базы данных впервые с нуля и после удаления всех данных и заполнения снова.
возможное решение А состоит в том, чтобы использовать усеченный для очистки, таблица вместо удаляют. Но тогда необходимо отбросить все ограничения и воссоздать их впоследствии
Таким образом, это всегда ведет себя как недавно составленная таблица и нет никакой потребности назвать DBCC CHECKIDENT. Первое значение идентификационных данных будет тем, определенным в определении таблицы, и это будет то же, неважно, при вставке данных впервые или для Энного
Почему это делается на C #? В PHP это сделать тривиально. Используйте функцию token_get_all ()
, и она разбивает файл PHP на поток лексем, который вы можете использовать для окончательного определения списка классов и методов, написав конечный автомат.
Что бы вы ни делали. не пытайтесь делать это с помощью регулярных выражений. Это будет невероятно утомительно и подвержено ошибкам.
Изменить: Для этого есть три основных возможности:
Для всего остального потребуется либо написание синтаксического анализатора PHP (много работы), либо использование действительно нестабильных регулярных выражений, которые будут кошмар ненадежной поддержки.
Чтобы беспокоиться о предполагаемых «недостатках безопасности» PHP, возникает несколько проблем:
Возможно, вы сможете использовать ctags
для своих целей. Я не уверен, как бы вы интегрировали его с C #, поскольку ctags написан на C.
В качестве альтернативы, если вы знаете свои парсеры, вы можете взглянуть на файлы грамматики в исходном коде PHP. В частности, zend_ini_parser.y
и zend_language_parser.y
.
Наконец, хотя это и не лучшее решение, вы могли , вероятно, уйти с горсткой домашнего приготовления регулярные выражения. Грамматика PHP довольно строгая в отношении классов и функций. Вам просто нужно немного отслеживать состояние, чтобы знать, к какому классу принадлежит функция.