【问题标题】:How do I use a variable pattern with preg_match?如何将变量模式与 preg_match 一起使用?
【发布时间】:2009-09-06 21:19:25
【问题描述】:

我不知道这些数据是否足够,但我有

preg_match('/SAMPLETEXT/', $bcurl, $cookie1);

我想知道我是否可以做到

preg_match($newfunction, $bcurl, $cookie1);

但是当我这样做时,我收到此错误“警告:preg_match() [function.preg-match]:分隔符不能是字母数字或反斜杠”。

如何让它检查我的新函数,而不是让它只检查“SAMPLETEXT”。

【问题讨论】:

  • $newfunction 的值是多少?
  • $newfunction 的值由大约 5-10 个数字的随机键字符串组成,在加载时插入到另一个文件的 SQL 中。

标签: php regex preg-match


【解决方案1】:

尝试preg_match("/$newfunction/", $bcurl, $cookie1);,以便提供所需的分隔符(使用不会出现在 $newfunction 中的分隔符)。

但请注意,documentation 表示“如果您只想检查一个字符串是否包含在另一个字符串中,请不要使用 preg_match()。请改用 strpos() 或 strstr(),因为它们会更快。”

【讨论】:

  • 这完全是失败。它在网站上检查 $function 而不是 $function 的实际随机键。
  • @Joey:你是用双引号还是单引号?
  • @Joey:$bcurl 的来源真的无关紧要。 preg_match 要么起作用,要么不起作用。你在我的例子中使用了双引号吗?
  • 你太棒了,谢谢!有用!我之前没有使用双引号。我扫描通过了你的答案,并没有看清楚,非常感谢。 :)
  • 请记住,如果$newfunction 的内容可以包含正则表达式的保留字符,例如.` or ?`,则应使用preg_quote 转义它。
【解决方案2】:

preg_match('/'.$pattern.'/i', $subject)

i 选项:允许大写字母或连字符。

【讨论】:

    【解决方案3】:

    你可以通过将变量放在[]之间来使用变量

        $subject = "abcdef";
    $ch = 'b';
    $pattern = '/[$ch]/';
    preg_match($pattern, $subject, $matches);
    //print_r($matches);
    if ($matches)
    {
        echo $subject;
    }
    

    【讨论】:

    • 这只是看起来有效,因为变量 name 包含一个 c。
    • "你可以通过将变量放在 []" 之间来使用变量,这完全是错误的。这段代码完全起作用只是偶然。
    猜你喜欢
    • 2016-12-20
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多