Странный preg_replace убегает? - PullRequest
1 голос
/ 18 июля 2011

Я просто задаюсь вопросом, как это решить.

У меня есть этот код

<?php
$test = "\u0000hi";
preg_match("|\\\\u0000|", $test, $a);
print_r($a);
?>

в приведенном выше случае, он работает.однако я не знаю, почему я должен использовать слишком много экранирующих символов?

в нижнем регистре

<?php
$test = "\\u0000hi";
preg_match("|\\\\\\\\u0000|", $test, $a);
print_r($a);
?>

У меня есть 8 экранирующих символов \ в preg_match и два в $test переменная (двойной счет как в предыдущем примере)

Может кто-нибудь объяснить мне эту проблему для начинающих?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

, если вы хотите найти одну обратную косую черту '\u'

вам нужно выйти из него в своем регулярном выражении '/\\u/'

и если вы поместите свое регулярное выражение в двойные кавычки, вам нужно экранировать обе обратные косые черты b / c, иначе они будут оцениваться как одна обратная косая черта в вашей строке, а затем как мета-символ в регулярном выражении:

"/\\\\u/"

вверху я написал '\ u' вместо "\ u", как в вашем случае, на самом деле b / c, если \ u является символом управления в "\ u", то вы все равно не найдете обратной косой черты.

1 голос
/ 18 июля 2011

Обе $test строковые записи имеют внутреннюю одинаковую строку. Попробуйте сами:

var_dump("\u0000hi");
// Outputs string(8) "\u0000hi"

var_dump("\\u0000hi");
//Outputs string(8) "\u0000hi"

Та же самая исходная строка, поэтому вам нужно использовать одно и то же регулярное выражение. Это тот, в котором четыре \.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...