我正在尝试从以下字符串中捕获:
var MyCode = "jdgsrtjd";
var ProductId = 'PX49EZ482H';
var TempPath = 'Media/Pos/';
我想得到的是单引号ProductId值
之间的可变长度值PX49EX482H
我有这个,我觉得它很接近,但是单引号让我感到沮丧。我不确定如何正确地逃脱它们。
preg_match('/var ProductID ='(.*?)';/', $str, $matches);
提前致谢!
答案 0 :(得分:5)
或者,您可以使用"
代替'
,这样您无需转义模式中找到的'
:
preg_match("/var ProductID ='(.*?)';/", $str, $matches);
您要查找的模式var ProductID ='(.*?)';
与输入字符串不匹配,因为:
=
ProductID
与ProductId
要修复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);