PHP RegEx Capture с одинарными кавычками - PullRequest
0 голосов
/ 19 октября 2010

Я пытаюсь получить данные из следующей строки:

var MyCode = "jdgsrtjd";
var ProductId = 'PX49EZ482H';
var TempPath = 'Media/Pos/';

То, что я хотел бы получить, это значение переменной длины между одинарным кавычком, значением ProductId

PX49EX482H

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

preg_match('/var ProductID ='(.*?)';/', $str, $matches);

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 19 октября 2010

В качестве альтернативы вы можете использовать " вместо ', поэтому вам не нужно избегать ', найденного в шаблоне:

preg_match("/var ProductID ='(.*?)';/", $str, $matches);

Также шаблон, который вы ищете var ProductID ='(.*?)'; не соответствует вашей входной строке, потому что:

  • после =
  • ProductID не соответствует ProductId

Чтобы исправить 1, вы можете дать пробел после =. Если вы не знаете количество пробелов, вы можете использовать \s* для произвольного пробела.

Чтобы исправить 2, вы можете сделать регистр нечувствительным, используя модификатор i.

preg_match("/var ProductID\s*=\s*'(.*?)';/i", $str, $matches);
                          ^^  ^^          ^
3 голосов
/ 19 октября 2010

Символы экранируются внутри строк в PHP (и практически во всех языках C-синтаксиса) с обратной косой чертой:

'This is a string which contains \'single\' quotes';
"This is a \"double\" quoted string";

В вашем примере:

preg_match('/var ProductID =\'(.*?)\';/', $str, $matches);

Обратите внимание, что вам не нужно экранировать одинарные кавычки в строке в двойных кавычках:

preg_match("/var ProductID ='(.*?)';/", $str, $matches);
1 голос
/ 19 октября 2010

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

preg_match('/var ProductID = \'(.*?)\';/im', $str, $matches);
...