|
|
|
| Кто знает, поясните плиз, никак не могу вьехать...
пример из книжки:
<?php
$subject = 'PHP\5';
$p1 = '/^PHP\\\5$/';
$p2 = "/^PHP\\\\5$/";
$r1 = preg_match($p1, $subject, $m1);
$r1 = preg_match($p2, $subject, $m2);
?>
|
Почему в $p1 три обратных слеша? Какой слэш какой экранирует? А в $p2 аж 4 слэша.
Из мануала:
Например, если вы хотите задать соответствие символу '*', в шаблоне вам необходимо указать '\*'. Это предотвратит трактование '*' как метасимвола с особым значением. Во избежание ошибок всегда экранируйте не буквенно-цифровые символы, если хотите указать соответствие самому символу. В частном случае для сопоставления с самим символом обратного слеша, используйте запись '\\'.
И здесь:
(!preg_match("/^(http:\\/\\/|http:\\/\\/www|www)(\\S+)$/si", $val))
|
Почему мы в строке "http://" каждый слеш экранируем двумя обратными слешами? Почему одного не достаточно? | |
|
|
|
|
|
|
|
для: tAleks
(19.06.2007 в 12:49)
| | > Почему в $p1 три обратных слеша? Какой слэш какой экранирует? А в $p2 аж 4 слэша.
Слеши нужно охватывать слешами, чтобы работало :) Если не путаю...
>Почему мы в строке "http://" каждый слеш экранируем двумя обратными слешами? Почему одного не достаточно?
Судя по всему из-за этого.. - (\\S+) | |
|
|
|
|
|
|
|
для: tAleks
(19.06.2007 в 12:49)
| | И в первом примере получится строка /^PHP\\5$/ - с двумя слешами, чтобы один из них экранировал другого в рег. выражении. (как раз "В частном случае для сопоставления...")
> Почему мы в строке "http://" каждый слеш экранируем двумя обратными слешами?
Вполне достаточно и одного. Можно было вообще не экранировать (если ограничители заменить на что-нибудь другое). | |
|
|
|
|
|
|
|
для: kasmanaft
(19.06.2007 в 13:05)
| | >> Почему мы в строке "http://" каждый слеш экранируем двумя обратными слешами?
>Вполне достаточно и одного. Можно было вообще не экранировать (если ограничители заменить на что-нибудь другое).
Сделал так:
if(!preg_match('|^http://[-a-zA-Z0-9\?=/\._]+$|i', $val)) $error[$key] = $err;
|
и оно у меня пропускает такой адрес:
http:///site.ru/index.php | |
|
|
|
|
|
|
|
для: tAleks
(19.06.2007 в 13:22)
| | а это вполне логично, потому что после http:// у вас разрешено еще куча символов, в том числе и /
слеши там экранируются, потому что обрамление для регулярки /, а у вас | , поэтому экранировать не требуется. | |
|
|
|