Я получил проблему в скрипте PHP, в случае этой функции для регулярного выражения и замены. Я тестировал свое регулярное выражение на www.regex101.com и получал всегда ожидаемые результаты, но не в PHP.
Я использую этот шаблон внутри функции:
$matchedName = preg_replace("/^(\$|\(.+\))( ?)/", "", $name);
Чтобы сопоставить символ "$" или любое выражение в скобках в начале и удалить его. Любой вход с кронштейнами работает хорошо.
$name = "$ blah";
$matchedName = preg_replace("/^(\$|\(.+\))( ?)/", "", $name);
var_dump($matchedName);
Output:
string(8) "$ blah"
Теперь, я что-то пропустил? Или эта функция действительно была проблемой в случае символа "$"?
Спасибо за любые ответы
$re = "/^(\\$|\\(.+\\))( ?)/im";
$str = "\$ blah";
$subst = "";
$result = preg_replace($re, $subst, $str);
Попробуйте это. Это работает.
Вам нужно уйти от \
, поэтому ваш код должен быть:
$name = "$ blah";
$regex = "/^(\\\$|\(.+\))( ?)/";
$matchedName = preg_replace($regex, "", $name);
var_dump($regex);
var_dump($matchedName);
Проблема в том, что вы находитесь в двойных кавычках ("..."
), поэтому интерпретатор PHP интерпретирует первый \
как просто экранирующий $
в строке, а не как литерал \
. Он должен быть буквальным \
для того, чтобы избежать символа в регулярном выражении.
Поэтому ваше текущее регулярное выражение выглядит так, как только его интерпретирует процессор: /^($|\(.+\))(?)/
. Вам нужно избегать двойных кавычек $
inside и предоставлять косую черту в контексте регулярного выражения, поэтому вы добавляете \\
.
Обратите внимание, что вы можете избежать этого, просто используя одиночные кавычки ('...'
) вместо этого, и вам понадобится только \$
вместо \\\$
:
$name = "$ blah";
$regex = '/^(\$|\(.+\))( ?)/';
$matchedName = preg_replace($regex, "", $name);
var_dump($regex);
var_dump($matchedName);
echo()
в исходном регулярном выражении вместо использования его с preg_match()
и вы обнаружите, что PHP не интерпретирует знак доллара ( $
) как переменную (поскольку за ним не следуют символы, которые разрешены в переменной имена).
$
- буквальный символ.