preg_replace удаляет вторую обратную косую черту в начале строки

#php #regex #path

#php #регулярное выражение #путь

Вопрос:

Рассмотрим это:

 $sServerPath = "\\nlyehvedw1cl016\projects$\ARCLE_SW_SVN\";
$sSVNParentPath = $sServerPath."svn\";

$bla = "
authz_module_name = TEST_TestRepos
repository_dir = bla

W";
$sSVNParentPath = $sServerPath."svn\";
$sReplaceBy =  "repository_dir = ".$sSVNParentPath.$sProjectName."n";
echo $sReplaceBy;
echo preg_replace ('/repository_dir = ([a-zA-Z0-9/].*?)n/i', $sReplaceBy, $bla);
  

Результатом является:

 repository_dir = \nlyehvedw1cl016projects$ARCLE_SW_SVNsvn

authz_module_name = TEST_TestRepos
repository_dir = nlyehvedw1cl016projects$ARCLE_SW_SVNsvn

W
  

Эхо $sReplaceB y показывает результирующую строку такой, какой я ее ожидаю, включая первые 2 обратных слэша.

Однако после preg_replace эхо-результата показывает только одну обратную косую черту!

Кто-нибудь знает, что является причиной этого?

Ответ №1:

Из PHP docs:

Чтобы использовать обратную косую черту при замене, ее необходимо удвоить («\» PHP строка).

Поскольку ваша замена не содержит кавычек, вы можете просто использовать addslashes():

 echo preg_replace ('/repository_dir = ([a-zA-Z0-9/].*?)n/i', addslashes($sReplaceBy), $bla);
  

Комментарии:

1. Действительно, нашел это в объяснении замены preg_replace на php.net…. Я прочитал это, но, по-видимому, с закрытыми глазами….