<?php
echo preg_replace ('/\\o/', 'O', 'What is Compatible?');
?>
Значение, которое извлечет PHP из строки '/\\o/' и будет использовано PCRE как патерн, будет равно \o. Поскольку 'o' не является управляющим символом, то экранирующий слэш должен быть проигнорирован и в результате останется только 'o', с которым и будут искаться совпадения. Но вместо этого выдается:
Warning: preg_replace(): Compilation failed: missing opening
brace after \o at offset 1
Если мы заменим 'o' ,например, на 'm'(т.е. '/\\m/'), то в слове 'Compatible' строчная 'm' заменится на прописную 'O', что ожидаемо. Если кто-либо сможет объяснить, в качестве чего воспринимается последовательность '\o'), буду очень благодарен.
Версия PHP 7.1.6 (xampp v3.2.2). Заранее спасибо! */
Судя по https://pcre.org/pcre.txt, \o используется для поиска совпадений символов по их восьмеричному коду:
\0dd character with octal code 0dd
\ddd character with octal code ddd, or back reference
\o{ddd..} character with octal code ddd..
Проверяем:
// 157 - восьмеричный код "о" http://www.asciitable.com/
var_dump(preg_match_all('/\o{157}/', 'What is Compatible?', $matches));
var_dump($matches);
Похоже на правду:
etki@kepler:~ > php /tmp/pcre.php
int(1)
array(1) {
[0]=>
array(1) {
[0]=>
string(1) "o"
}
}
Это зарезервированная буква и может использоваться как настройка в конце регулярного выражения. Например:
i case insensitive
m make dot match newlines
x ignore whitespace in regex
o perform #{...} substitutions only once
Еще один вариант это работать как с восьмеричной системой счисления
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники