Я пытаюсь сопоставить все экземпляры подстроки '$ {foo}' внутри $ content. По какой-то причине я могу сопоставить «{foo}», но не «$ {foo}». Кто-нибудь знает, почему?
$content="aaaa\${foo}bbbb\n";
echo $content; // aaaa${foo}bbbb
// THIS WORKS AS EXPECTED: matches all instances of substring '{foo}'
$result = preg_match_all("/(\{\w+\})/", $content, $matches);
if ($result === false) { die("NOT OK!"); }
echo "NUMBER OF MATCHES: ", $result, "\n";
var_dump($matches);
// THIS DOESN'T WORK AS EXPECTED: doesn't match instances of substring '${foo}'
$result = preg_match_all("/(\$\{\w+\})/", $content, $matches);
if ($result === false) { die("NOT OK!"); }
echo "NUMBER OF MATCHES: ", $result, "\n";
var_dump($matches);
Вот вывод этого кода. Первая часть выходов 1 соответствует, как и ожидалось, в то время как вторая часть выходов 0 матчей, но я ожидал 1 матч:
aaaa${foo}bbbb
NUMBER OF MATCHES: 1
array(2) {
[0]=>
array(1) {
[0]=>
string(5) "{foo}"
}
[1]=>
array(1) {
[0]=>
string(5) "{foo}"
}
}
NUMBER OF MATCHES: 0
array(2) {
[0]=>
array(0) {
}
[1]=>
array(0) {
}
}
спасибо.
При использовании двойной кавычки, чтобы заключить строку шаблона, вы должны спасаясь от '$' знак дважды. Один раз, чтобы предотвратить синтаксический анализатор php, чтобы увидеть '' 'как начало переменной, один раз, чтобы избежать специального символа регулярного выражения' $ '. Если вы хотите избежать этого только один раз, используйте одинарные кавычки. –
просто введите, используйте одинарные кавычки для регулярных выражений. Это избавит вас от головной боли. –