代码之家  ›  专栏  ›  技术社区  ›  Dave Kiss

带单引号的php regex捕获

  •  0
  • Dave Kiss  · 技术社区  · 14 年前

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

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

    我想得到的是单引号productid值之间的可变长度值

    PX49EX482H
    

    我有这个,我认为它很接近,但单引号让我很困惑。我不知道如何正确地逃离他们。

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

    事先谢谢!

    3 回复  |  直到 14 年前
        1
  •  5
  •   codaddict    14 年前

    或者您可以使用 " 代替 ' 这样你就不必逃避 在模式中找到:

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

    还有你要找的图案 var ProductID ='(.*?)'; 与输入字符串不匹配,因为:

    • 后面没有空位 =
    • ProductID 不匹配 ProductId

    要修复1,可以在 = . 如果您不知道可以使用的空格数 \s* 对于任意空间。

    要修复2,可以使用 i 修饰语。

    preg_match("/var ProductID\s*=\s*'(.*?)';/i", $str, $matches);
                              ^^  ^^          ^
    
        2
  •  3
  •   user229044 Sam Hogarth    14 年前

    字符在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);
    
        3
  •  1
  •   Silver Light    14 年前

    试试这个:

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