застрял в регулярном выражении я не знаю, возможно ли это вообще или нет с помощью php preg_match_all - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть файл, из которого я хочу получить конкретные данные. Ниже приведены примеры данных

 moduleHelper.addModule('REC');
  moduleHelper.addModule('TOP');

То, что я хочу, это

anything.anything ( 'х'); т.е.

moduleHelper.addModule('');

Это то, что я хочу вернуть.

Мне просто не нужна часть 'x', исключая одинарные кавычки.

Я попробовал сам и написал регулярное выражение, которое ниже.

/(.*)\.(.*)\(\'[^.*]\'\)/mi

это не дает мне ничего согласно руководству PCRE, что ^ внутри [] делает отрицание ??

Ответы [ 5 ]

2 голосов
/ 29 апреля 2011

Это можно сделать с помощью preg_replace_callback , если вы хотите выяснить, как работает эта обратная ссылка, но я думаю, что это немного проще:

// the regex
$regex = "/(?P<FIRST>.+)?\.(?P<SECOND>.+)\('(?P<PARAM>.+)?\'\)?/mi";

$subject = <<<EOB
moduleHelper.addModule('REC');
moduleHelper.addModule('TOP');
EOB;

$matches = array();
$numberOfMatches = preg_match_all($regex, $subject, $matches, PREG_SET_ORDER);


$results = array();
foreach($matches as $match)
{
    array_push($results, sprintf("%s.%s('')", $match['FIRST'], $match['SECOND']));
}

print_r($results);

// result:

Array
(
    [0] => moduleHelper.addModule('')
    [1] => moduleHelper.addModule('')
)
0 голосов
/ 28 апреля 2011

Попробуйте это:

 /([^.]*)\.([^.]*)\(.*\)/
0 голосов
/ 28 апреля 2011

Попробуйте использовать следующее

/^([^.]+)\.([^\(]+)/
0 голосов
/ 28 апреля 2011

Если ^ - первый символ в [], то он отменяет остальные символы в наборе.Где [ab] принимает либо a, либо b, [^ ab] принимает любой символ, который не является ни a, ни b.

Также я не уверен, что вы хотите.Вы заявляете, что не хотите «х», но что именно вы хотите?

0 голосов
/ 28 апреля 2011

Это действительно отрицание. [^.*], в данном случае, означает «войти на символ, который не . или *.

preg_match_all( "/(\w+\.\w+)(?=\([\"']\w+[\"']\);)/i", $string, $matches);
...