Захватить текст между конкретными тегами в файле PHP - PullRequest
3 голосов
/ 26 января 2012

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

Мне нужно знать, как сканировать несколько файлов php в одном каталоге (например, test /) и извлекать текст между определенными «помеченными» областями в каждом файле php.

Пример «помеченные области:

<?
/*
{('test1')}
*/
?>

<div>text here</div>

<?
/*
{('test2')}
*/
?>

И код будет отображать test1, test2 и т. д. и игнорировать все остальное.Я попытался просмотреть fopen (), file_get_contents и preg_match_all, но каждый раз они находят только первое вхождение, а не каждое вхождение «помеченных» областей.Любая помощь была бы отличной!

РЕДАКТИРОВАТЬ - ЧТО Я В ТЕЧЕНИИ ЕСТЬ:

foreach (glob("templates/*.php") as $fn) {

$file = file_get_contents($fn);

preg_match_all("#\{\('(\w+)'\)}#", $file, $matches);   

$variable = join('', $matches[1]);

echo $variable.'<br />';

Как добавить к этому array_chunk, чтобы каждая итерация теста выводилась как его собственная переменная вместосгруппированы в массив.Я попробовал это:

$variable = array_chunk($matches[1],1);

безуспешно, он просто печатает «Массив».любая помощь будет отличным делом.Я отправлю новый вопрос, если не получу ответ.

Ответы [ 3 ]

2 голосов
/ 26 января 2012

Вот как вы можете избежать регулярного выражения:

foreach (glob("template/*.php") as $fn) {

    $file = file_get_contents($fn);

    preg_match_all("#\{\('(\w+)'\)}#", $file, $matches);   

    print_r($matches);

}

Eugen показал, как сопоставлять теги PHP / PI <? и комментарии /*. Вам может понадобиться \s* между ними.

0 голосов
/ 26 января 2012
$filepattern='test/*.php';
$tagpattern='/\<\?\n\/\*\n\{\(\'([^\']+)\'\)\}\n\*\/\n\?\>/';

$files=glob($filepattern);
foreach ($files as $file) {
  $content=file_get_contents($file);
  $count=preg_match_all($tagpattern,$content,$matches);
  if ($count<1) continue;

  //Whatever you want to do with the matches!
  foreach ($matches[1] as $match) echo "$file: $match\n";
}
0 голосов
/ 26 января 2012

Regex не подходит и медленно для этого.попробуйте php dom или эту хорошую библиотеку

http://simplehtmldom.sourceforge.net/

...