привет, я пишу программу java, чтобы удалить все комментарии из строки, которая кодирует исходный код php, может ли кто-нибудь дать мне регулярное выражение для комментария php? пожалуйста
Посмотрите на эту ссылку: http://ostermiller.org/findcomment.html
Он приходит к этому решению (для /* ... */
comments):
sourcecode.replaceAll("/\\*(?:.|[\\n\\r])*?\\*/","");
Для // ...
и # ...
комментариев вы должны быть способны сделать что-то вроде
sourcecode.replaceAll("(//|#).*?[\\n\\r]");
Остерегайтесь следующих ситуаций:
someString = "An example comment: /* example */";
someString = "An example comment: // example";
someString = "An example comment: # example";
Как сказал Спэдли, вы не можете просто написать регулярное выражение, чтобы сделать это. Слишком много исключительных случаев, таких как строки с комментариями внутри строк, а комментарии к линиям заканчиваются раньше, закрывая теги PHP. Чтобы гарантировать правильность, вы могли бы написать полный парсер языка.
Однако , если вы хотите использовать PHP для фильтрации, для этого вопроса есть все ответы, и это должно быть значительно проще и надежнее. Если у вас установлен PHP на том же компьютере, что и приложение Java, вы можете запустить PHP с использованием Runtime.exec()
и получить вывод консоли или экспортировать PHP в файл и импортировать его позже в свою программу.
Это будет очень сложно!
Для начала у вас есть три типа комментариев в PHP: /* ... */
, а также //
и #
.
Но вам нужно исключить те, которые являются частью строки, тем более, что //
может появляться довольно часто в строках, в качестве экранированного символа косой черты, а символ #
внутри строки может быть совершенно законной частью текста.
Чтобы усугубить эту проблему, строки могут быть многострочными, и в дополнение к одиночным и двойным кавыдам они также могут быть написаны с использованием синтаксиса Heredoc и Nowdoc (см . http://php.net/manual/en/language.types . string.php ), что может быть особенно сложно определить с помощью регулярного выражения. Кроме того, конечно, вы должны быть уверены, что находитесь в тегах <?php ... ?>
.
Возможно, это можно сделать, но, честно говоря, я бы сказал, что со всем этим нужно иметь дело с гораздо более удобным использованием парсера языка, чем регулярное выражение, чтобы попытаться это сделать.