Если все, что вы хотите сделать, это проверить токены, то токенайзер PHP, как предлагали другие, может быть хорошим выбором.
Если вы хотите сделать этодля автоматического изменения исходного кода надежным способом, я не уверен, что это поможет вам.Как вы будете регенерировать измененный исходный текст?
Еще один способ сделать это - использовать программа преобразования движок.Такой механизм может анализировать исходный текст в абстрактных синтаксических деревьях, фиксируя структуру программы (а также эффективное содержимое всех токенов), и позволяет осуществлять поиск и преобразование этих AST с использованием надежных сопоставлений / преобразований шаблонов.Для этого вам понадобится механизм, который надежно анализирует PHP и сможет воспроизводить скомпилированный исходный текст из измененного AST.
Наш DMS Software Reengineering Toolkit является такой системой преобразования программ, ион имеет надежный PHP Front End , который может точно обрабатывать PHP5 с точки зрения синтаксического анализа, преобразования и печати результатов обратно в текст.(Правильный синтаксический анализатор PHP сложен , потому что язык плохо документирован).Поскольку интерфейс может точно подобрать HTML и PHP-код, вам не нужно для разделения текста;они будут припаркованы в четко различимых местах в уникальных узлах дерева.
Чтобы изменить все отображаемые строки с строчных на прописные, вы должны использовать DMS для анализа PHP, а затем применить следующее правило преобразования:
rule uppercase_echoed_string(s: STRING): statement -> statement
= "echo \s;" -> "echo \uppercase\(\s\);".
Это правило написано на языке спецификации правил (RSL) DMS, который явно не является PHP.Материал внутри кавычек - это PHP-код;это мета кавычки, обернутые вокруг текста языка программирования, которым манипулируют.\ Chararacter является мета-escape: \ s указывает метавариабельную переменную, которая должна совпадать со строковым литералом, \ uppercase - это имя функции DMS, внешней по отношению к языку RSL, а () - это круглые скобки мета вокруг вызова мета-функции в верхнем регистре, применяется к соответствующей строке \ s.Поскольку правило действует на AST, его нельзя спутать;это не изменит текст / * echo 'def' * /, потому что это не утверждение.
Скорее всего, вам понадобится несколько правил для обработки разнообразных синтаксических комбинаций: STRING в данном случае относится к буквальным строкам в одинарных кавычках;Строки с двойными кавычками не являются монолитными объектами, а состоят из серии QUOTED_STRING_FRAGMENTS, которые соответствуют тексту в строке с двойными кавычками между выражениями PHP внутри этой строки с двойными кавычками.
В конце процесса преобразования измененный AST отправляется в комплекте с исходным отступом и комментариями, за исключением случаев, когда были применены преобразования.
Существует также полностью синтаксический анализатор JavaScript для DMS, который вам понадобится, если вы хотите точно обрабатывать содержимое тегов SCRIPT.
Если вы хотите внести надежные изменения вИсходный код, это ИМХО является единственным хорошим способом сделать это.Вы можете попробовать взлом строк и регулярные выражения, но для синтаксического анализа PHP требуется синтаксический анализатор, а RE этого не делают, поэтому любой полученный вами результат не будет заслуживающим доверия.