Как правильней? Слеши, переданные preg_match

Anarki

Новичок
Как правильней? Слеши, переданные preg_match

Так
PHP:
 if (!preg_match('#/tmp\\\php[0-9A-Za-z]+\.tmp#', $hscr)) die("die");
или
PHP:
if (!preg_match('#/tmp\\\\php[0-9A-Za-z]+\.tmp#', $hscr)) die("die")
так?

Прошу обратить внимание на количество слешей.
Оба варианта работают. Ответы прошу обосновать.
 

denver

?>Скриптер
Вы хотите сказать что они оба НЕ работают? :)

на какой строке проверяли?
 

Anarki

Новичок
при чём здесь регулярки?
А притом, что preg_match пытается заменять \символ на управляющую последовательность, даже если строка ей передана в одинарных кавычках.
 

Фанат

oncle terrible
Команда форума
у тебя каша в голове.
preg_match к одинарным кавычкам не имеет никакого отношения.
функции передаётся строка. не в двойных и не в одинарных кавычках. а просто строка.
а ты даже не знаешь, что функции передаётся, а полез исследовать, как она работает
 

Anarki

Новичок
В книге Д.Котерова, А.Костарева "PHP 5" был похожий пример, так там использовались 4 слеша(\\\\), они заменялись на \\, затем в pcre уже оказывался \. Некоторые утверждают что так нужно по стандартам, х3 каким.

Вот мне интересно, зачем PHP делать два действия, превращая четыре слеша в два, если можно указать три слеша и он превратит только первую пару в слеш(два слеша в итоге)

Получается одно и тоже, только с меньшим числом действий.
 

Фанат

oncle terrible
Команда форума
Ах, вот что тебя заботит?
то есть, про регулярные ты уже забыл, и озаботился действиями пхп? как бы он, бедный, не перетрудился.
я тебя правильно понял?
 

Anarki

Новичок
Да.
Как я понял проблема с количеством слешей у людей возникает при подстановке в регулярные выражения, поэтому я и привел такой пример.
 

Фанат

oncle terrible
Команда форума
а без подстановки в регулярное, такая проблема не возникает?

-~{}~ 05.09.06 13:40:

стоп.
только что тебя заботили проблемы пхп, и вдруг резко ты переключился на людей.
при том, что заботить тебя должна твоя собственная неграмотность.
ты можешь на чём-то одном остановиться?
 

WP

^_^
Возникает только у оптЕмЕзатАрафф пыхыпэ. Все остальные ясно понимают что
PHP:
echo '\\lol';
// \lol
echo '\lol';
// \lol
Дело в том что слеши нужно экранировать, т.е. писать \\ где нужен \, и это ПРАВИЛЬНО. Другое дело что если мы не проэкранируем \ нас никто за это не накажет. В двойных ковычках нужно следить чтобы не было \test'ов :)
Регулярки и строки PHP - совершенно независимые вещи. И pcre не знает как с точки зрения синтаксиса была записана строка, мож она вообще была взята из базы :) И в регулярных выражениях \ является спец-символом в силу того что там есть escaped-последовательности вроде \xFF.
Я бы использовал 4 слеша, на стадии парсинга они превратились бы в 2, а на стадии обработки регулярного выражения остался бы один. Правильный вариант - 2.
 
Сверху