Вы должны избежать всех обратных слешей, как

ужна обратная косая черта, чтобы быть частью строки. Как я могу это сделать?

 Gordon22 янв. 2011 г., 00:09
(ссылка) Струны
 Bobby27 нояб. 2012 г., 11:37

Ответы на вопрос(3)

"c:\\windows\\".

Краткий ответ:

Используйте две обратные косые черты.

Длинный ответ:

Иногда вы можете использовать одну обратную косую черту, но иногда вам нужно две. Когда вы можете использовать одну обратную косую черту, зависит от двух вещей:

окружена ли ваша строка одинарными или двойными кавычками иперсонаж сразу после обратной косой черты.

Если у вас есть строка в двойных кавычках, обратный слеш во многих случаях рассматривается как escape-символ, поэтому лучше всегда избегать обратного слеша с помощью другого обратного слеша:

$s = "foo\\bar"

В одной строке в кавычках обратная косая черта будет литеральной, если за ней не следует ни одинарная кавычка, ни другая обратная косая черта. Таким образом, чтобы вывести один обратный слеш с одной строкой в ​​кавычках, вы можете написать:

$s = 'foo\bar'

Но для вывода двух обратных косых черт подряд вам понадобится следующее:

$s = 'foo\\\\bar'

Если вы всегда используете две обратные косые черты, вы никогда не ошибетесь.

 Andris15 мар. 2015 г., 04:55
Мне понравилосьif( !preg_match( '/^[\\\,.\d\pL]*$/u', $_POST['some_text'] ) ) { ... } Таким образом, чтобы избежать обратной косой черты, мне пришлось использовать 3 обратной косой черты \\\. Пробовал с одним и двумя, не получилось. Не понимаю почему 3
 FrancescoMM22 окт. 2016 г., 08:43
@ user2118559 первые два в строке, заключенной в одинарные кавычки, генерируют один, третий остается в одиночестве (без одинарных кавычек или обратной косой черты). поэтому две строки с обратной косой чертой вставляются в строку, которая передается в регулярное выражение. Затем регулярное выражение использует первое для экранирования второго, что приводит к единственному «реальному» (= действительно найденному в тексте) символу возврата. Вместо этого вы могли бы использовать четыре (четыре становятся двумя, анализируя строку, затем оставшиеся два становятся одним, анализируя регулярное выражение), как правильно предложено в этом ответе.
Решение Вопроса

Когда обратная косая черта\ не экранирует завершающую кавычку строки или иным образом не создает допустимую escape-последовательность (в строках с двойными кавычками), тогда любая из этих операций создает один обратный слеш:

$string = 'abc\def';
$string = "abc\def";
//
$string = 'abc\\def';
$string = "abc\\def";

Если экранирование следующего символа приведет к ошибке синтаксического анализа (завершающая кавычка строки) или допустимой escape-последовательности (в строках с двойными кавычками), то необходимо экранировать обратную косую черту:

$string = 'abcdef\\';
$string = "abcdef\\";

$string = 'abc\012';
$string = "abc\\012";
 mario22 янв. 2011 г., 00:15
В этом конкретном примере обратная реакция может быть одиночной. Тем не менее, это хорошая практика, чтобы избежать этого. Но для одинарных кавычек.
 jskidd316 сент. 2015 г., 11:22
Для одинарных кавычек это не сработает, если обратная косая черта находится в конце строки. Использование двойной обратной косой черты в одинарных кавычках работает во всех сценариях - последний пример лучше независимо от типа кавычек.

Ваш ответ на вопрос