preg_match не захватывает контент - PullRequest
2 голосов
/ 26 ноября 2011

что не так с моим preg_match?

preg_match('numVar("XYZ-(.*)");',$var,$results);

Я хочу получить все CONTENT отсюда:

numVar ("XYZ- CONTENT ");

Спасибо за любую помощь!

Ответы [ 4 ]

2 голосов
/ 26 ноября 2011

Я предполагаю, что это PHP?В этом случае у вашего кода есть три проблемы:

  1. Функции PHPRE в PHP требуют, чтобы регулярные выражения форматировались с разделителем.Обычный разделитель - /, но вы можете использовать любую подходящую пару.
  2. Вы не оставили свои круглые скобки в своем регулярном выражении, поэтому вы не соответствуете символу (, но создаете REgroup.
  3. Вы должны использовать не жадное сопоставление в своем RE.В противном случае строка типа numVar("XYZ-CONTENT1");numVar("XYZ-CONTENT2"); будет соответствовать и , а ваша группа содержимого будет CONTENT1");numVar("XYZ-CONTENT2.

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

$var = 'numVar("XYZ-CONTENT");';
preg_match('/numVar\("XYZ-(.*?)"\);/',$var,$results);

var_dump($results);
1 голос
/ 26 ноября 2011

Вставьте пример строки в http://txt2re.com и посмотрите на результат PHP.

Это покажет, что вам нужно экранировать символы, которые имеют особое значение для движка регулярных выражений (например, скобки).

0 голосов
/ 26 ноября 2011
preg_match("/XYZ\-(.+)\b/", $string, $result);
print_r($result[0]); // full matches ie XYZ-CONTENT
print_r($result[1]); // matches in the first paren set (.*)
0 голосов
/ 26 ноября 2011

Вы должны избежать некоторых символов:

preg_match('numVar\("XYZ-(.*)"\);',$var,$results);
...