PHP preg_match 用于匹配模式中前一组的正则表达式?

PHP preg_match regex for matching a previous group in the pattern?

我在 Whosebug 中看到了这个问题,但答案没有帮助。 实际上我需要在我的正则表达式模式中引用上一组。

  $s = "1:1";

  $p = "/([0-9]):/";
  echo preg_match($p, $s); // False

  $p = "/([0-9]):/";
  echo preg_match($p, $s); // False

转义反斜杠

<?php
  $s = "1:1";
  $p = "/([0-9]):\1/";
  echo preg_match($p, $s);
  // Output: 1

(都写在评论里了,不过不管怎样)

双引号中的字符串由 php 解释。在这种情况下,\1 变成了八进制 1。要生成斜线,您需要自己将其转义 \

或者您可以在单引号中使用未解释的字符串 '/([0-9]):/'

直接使用$p = "/([0-9]):?1/";