#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…. Я прочитал это, но, по-видимому, с закрытыми глазами….