2015-07-28 3 views
2

Я видел этот вопрос в Stackoverflow, но ответы не помогли. На самом деле мне нужно ссылаться на предыдущую группу в моем шаблоне регулярных выражений.PHP preg_match regex для сопоставления предыдущей группы в шаблоне?

$s = "1:1"; 

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

ИЛИ

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

'/ ([0-9]): \\ 1 /' – Rizier123

+2

использовать одиночные кавычки, в противном случае '\ 1 'в двойные кавычки интерпретируются как восьмеричное представление символа. –

+0

$ 1 предназначен для получения привязанных значений, поэтому его следует использовать вместо строки – Raghavendra

ответ

4

побег обратный слэш

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

(все написано в комментариях, но в любом случае)

Строки в двойных кавычках интерпретируются PHP. В этом случае \ 1 превращается в восьмеричную 1. Чтобы сделать косую черту, вам нужно бежать само по себе \\.

Или вы можете использовать интерпретируемые строку в одинарных кавычках '/([0-9]):\1/'

+1

* Побег с обратной косой чертой * ** Почему? ** – Rizier123

+0

обратная косая черта не нужна – Raghavendra

+0

si mple, '$ p = '/ ([0-9]): \ 1 /';' –

Смежные вопросы