У меня проблема с захватом в регулярных выражениях:
Есть функция:
$f = function($doc)
{
$data = [];
preg_match_all("/[\s]*[\/\*\s]*(.+)[\/\*\s]*/i", $doc, $matches);
var_dump($matches);
};
Парсим php doc блок такого вида:
$f("
/**
* test
*
* @param string \$comment
*
* @return array
*/
");
Дамп (тут все как и должно быть).
array(3) {
[0]=>
string(4) "test"
[1]=>
string(22) "@param string $comment"
[2]=>
string(13) "@return array"
}
Если распарсить блок такого вида:
$f("/** @var array ___TEST___ */");
То в конце захватываются ненужные символы: пробел и */ ( */), хотя в правиле регулярного выражения это прописано [\/\*\s]*/i
array(1) {
[0]=>
string(34) "@var array ___TEST___ */"
}
Как исправить данное выражение, чтобы оно не захватывало эти последние 3 символа?
В качестве альтернативного решения посмотрите в сторону использования штатного средства разбивки на лексемы.
Пример вытаскивания конкретного поля из PHPDoc в списке файлов .php
if ($token[0] === T_DOC_COMMENT && preg_match('/@api-call/m', $token[1]) !== 0) {
$method = preg_replace("/.*@api-call\s+(\w+).*/s", "$1", $token[1]);
}
Постройте шаблон таким образом: '~(?<=\s)[^*/]+(?=\b)~i' И тогда будут найдены все необходимые вхождения, без использования подмасок.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости