Regex для анализа переменных комментариев в PHP - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть блок комментариев, который может выглядеть следующим образом;

/**
 * variable1: value
 * variable2: value
 */

или как это;

/*
variable1: value
variable2: value
*/

Что мне нужно, так это уметь сопоставлять любое количество пар переменная / значение и добавлять их в массив. Я, кажется, не могу понять это, я продолжаю сопоставлять неправильные вещи.

Все переменные будут однострочными, поэтому это немного упростит ситуацию. Пробелы перед 'variable' или после двоеточия следует игнорировать, но все остальные пробелы в строках значений следует сохранять.

UPDATE:

Я закончил тем, что немного расширил выбранный ответ;

/(\w)*\s*:\s*([\w'"\/.: ]*)/

Это позволило использовать URL-адреса в качестве значений;

/**
 * url: 'some/file.png'
 * url: "http://www.google.ca/intl/en_ca/images/logo.gif"
 */

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Это не работает? (Предполагается, что многострочное сопоставление включено)

(\w)*\s*:\s*(\w*)

Я предполагаю, что вы сняли блок комментариев с чем-то вроде

\/\*.*?\*\/

с ., настроенным на совпадение с чем-либо.

0 голосов
/ 11 февраля 2010

Вы можете попробовать это:

$str=<<<A
/**
 * variable1: value
 * variable2: value
 */

some text

/*
variable1: value
variable2: value
*/

A;

preg_match("/\/\*(.*?)\*\//sm",$str,$matches);
foreach($matches as $k=>$v){
    $v = preg_replace("/\/|\*/sm","",$v);
    $v = array_filter(explode("\n",$v));
    print_r($v);
}

выход

$ php test.php
Array
(
    [1] =>   variable1: value
    [2] =>   variable2: value
    [3] =>
)
Array
(
    [1] => variable1: value
    [2] => variable2: value
)

теперь вы можете разделить эти переменные, используя Explode и т.д ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...