#php #regex #expression #pcre #preg-match-all
#php #регулярное выражение #выражение #pcre #preg-match-all
Вопрос:
у меня есть файл, из которого я хочу получить конкретные данные, ниже приведен пример данных
moduleHelper.addModule('REC');
moduleHelper.addModule('TOP');
Чего я хочу, так это
что угодно.что угодно (‘x’); т. е.
moduleHelper.addModule('');
Это то, что я хочу вернуть.
я просто не хочу, чтобы часть ‘x’ состояла исключительно из одинарных кавычек.
я попробовал сам и написал регулярное выражение, которое приведено ниже.
/(.*).(.*)('[^.*]')/mi
это ничего не дает мне в соответствии с руководством PCRE ^ внутри [ ] делает отрицание??
Комментарии:
1.
/(.*).(.*)('?[^.*]'?)/mi
?2. Вы имеете в виду, что хотите заменить x пустой строкой?
3. Он имеет в виду, что кавычки вокруг
x
могут быть одинарными или двойными или что угодно.
Ответ №1:
Это можно было бы сделать с помощью 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('')
)
Ответ №2:
Попробуйте использовать следующее
/^([^.] ).([^(] )/
Ответ №3:
Если ^ является первым символом в [ ], то это отрицает остальные символы в наборе. Где [ab] принимает либо a, либо b, [^ab] принимает любой символ, который не является ни a, ни b.
Также я не уверен, чего вы хотите. Вы заявляете, что вам не нужен ‘x’, но что именно вы хотите?
Комментарии:
1. я хочу, чтобы строка с именем параметра была внутри этой функции
2. Если вы используете
preg_match
then/(. .. (').*('))/Ui
, вам следует предоставить первую часть (до'
in$matches[1]
включительно и закрывающую')
in$matches[2]
. Это, конечно, означает, что вам нужно указать третий параметрpreg_match
. Я не думаю, что возможно получить то, что вы хотите, в одной строке, вы должны использовать конкатенацию строк.
Ответ №4:
Это делает отрицание. [^.*]
в данном случае означает «получить символ, который является не .
или *
. Я думаю, вы хотите ниже, но я не могу точно сказать.
preg_match_all( "/(w .w )(?=(["']w ["']);)/i", $string, $matches);
Комментарии:
1. спасибо, Кевин, я хочу все, кроме параметра, идущего внутри функции. ваш шаблон работает нормально, но я не хочу, чтобы возвращалась часть параметра, я хочу moduleHelper.addModule(«);
2. @G molvi, я обновил свое регулярное выражение. Это позволит вам получить
moduleHelper.addModule
доступ ко всему, что имеет объект вызов метода и один параметр.3. Спасибо, Кевин, ты очень близок, это дает мне moduleHelper.addModule вот и все, я хочу, чтобы это дало мне moduleHelper.addModule(«);
4. @G molvi, это самое близкое, что вы получите, не получая также параметр. Просто добавьте
('')
к полученным результатам. Если вы специально пытаетесь сопоставить,moduleHelper.addModule('');
добавьте(''(
в конец регулярного выражения.
Ответ №5:
Попробуйте это:
/([^.]*).([^.]*)(.*)/
Комментарии:
1. извините, это все то же самое, что и раньше