单引号的PHP RegEx捕获

时间:2010-10-19 13:42:59

标签: php regex string preg-match

我正在尝试从以下字符串中捕获:

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

我想得到的是单引号ProductId值

之间的可变长度值
PX49EX482H

我有这个,我觉得它很接近,但是单引号让我感到沮丧。我不确定如何正确地逃脱它们。

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

提前致谢!

3 个答案:

答案 0 :(得分:5)

或者,您可以使用"代替',这样您无需转义模式中找到的'

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

您要查找的模式var ProductID ='(.*?)';与输入字符串不匹配,因为:

  • =
  • 之后没有空格
  • ProductIDProductId
  • 不符

要修复1,您可以在=之后添加空格。如果您不知道空格的数量,可以使用\s*作为任意空格。

要修复2,可以使用i修饰符使匹配大小写不敏感。

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

答案 1 :(得分:3)

使用反斜杠在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);

答案 2 :(得分:1)

试试这个:

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