Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения 
:(
    Опции темы
GQU
Дата 22.4.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Код

<?php
$str='GQU';
if(ereg("^A-Za-z$",$str))
echo 'Строка соответствует шаблону';   
else
echo 'Строка не соответствует шаблону';

?>

Почему ereg возвращает false ?


И еще один
Код

<?php
$str='\';
if(ereg("\\",$str))
echo 'Строка соответствует шаблону';     
else
echo 'Строка не соответствует шаблону';
 
?>

Здесь тоже самое,-почему ereg возвращает false ?


Это сообщение отредактировал(а) GQU - 22.4.2011, 11:53
PM MAIL   Вверх
WolfAlone
Дата 22.4.2011, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Цитата(GQU @  22.4.2011,  11:51 Найти цитируемый пост)
Почему ereg возвращает false ?

По тому, что строка не соответствует шаблону.

Попробуйте например вот так:
Код

"^[a-zA-Z]*[a-zA-Z]*$"

Так - соответствует.

http://phpclub.ru/detail/article/regexp_1 - вот тут достаточно подробно написано про регулярные выражения, рекомендую!

Добавлено через 5 минут и 36 секунд
Приведённый мной пример кода, расшифровывается примерно так:
Строка содержит любое кол-во (символ '*') букв (a-Z) в верхнем или нижнем регистре в начале строки и то же самое - в конце строки.

По моему, ошибка из-за того, что по умолчанию [a-zA-Z] - означает 1 символ, а у Вас в строке их 3 (а не 2)...


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
GQU
Дата 22.4.2011, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Ну да точно это только для 1-го символа, а во 2-ом примере почему false ?
PM MAIL   Вверх
WolfAlone
Дата 22.4.2011, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Цитата(GQU @  22.4.2011,  13:03 Найти цитируемый пост)
а во 2-ом примере почему false ? 

А во втором примере - ошибка в строке 2. Указан экранирующий символ ("\"), за которым следует кавычка... Если написать правильно, то получиться такая вот строка:
Код

$str = '\\';


В случае сравнения через регулярное выражение двух '\\' - возникает ошибка: "REG_EESCAPE" (конечная обратная косая черта).


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
GQU
Дата 22.4.2011, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Цитата

По моему, ошибка из-за того, что по умолчанию [a-zA-Z] - означает 1 символ, а у Вас в строке их 3 (а не 2)... 

В моем примере нет квадратных скобок, даже если сделать так
Код

<?php
$str='W';
if(ereg("^A-Za-z$",$str))
echo 'Строка соответствует шаблону';   
else
echo 'Строка не соответствует шаблону';

?>

выдает false
Цитата

Если написать правильно, то получиться такая вот строка:
$str = '\\';

Так, что ли, вы имеете ввиду

Код

<?php
$str='\\';
if(ereg("\\",$str))
echo 'Строка соответствует шаблону';     
else
echo 'Строка не соответствует шаблону';

?>

Если да, то это не работает

Это сообщение отредактировал(а) GQU - 22.4.2011, 13:52
PM MAIL   Вверх
WolfAlone
Дата 22.4.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Цитата(GQU @  22.4.2011,  13:50 Найти цитируемый пост)
Если да, то это не работает
 это не работает, по тому, что возникает ошибка "REG_EESCAPE", которая означает ни что иное как, "Символ обратного слэша в конце строки". Строка не должна оканчиваться символом "\"!



Цитата(GQU @  22.4.2011,  13:50 Найти цитируемый пост)
выдает false

Выдаёт FALSE по тому, что выражение:
Код

^A-Za-z$


Означает ни что иное, как строку "A-Za-z". Если вы замените:
Код

$str='W';

на
Код

$str='A-Za-z';

то вернёт TRUE. Что бы обозначить последовательность символов от A до Z (или от a до z) их нужно заключить в квадратные скобки "[ и ]".
Правильно будет так:
Код

<?php
$str='W';
if(ereg("^[A-Za-z]$",$str))
echo 'Строка соответствует шаблону';   
else
echo 'Строка не соответствует шаблону';
?>

- вернёт TRUE;


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
GQU
Дата 22.4.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Цитата

Строка не должна оканчиваться символом "\"!

А если так
Код

<?php
$str='g\m';
if(ereg("g\\m",$str))
echo 'Строка соответствует шаблону';     
else
echo 'Строка не соответствует шаблону';

?>

почему false?
PM MAIL   Вверх
gta4kv
Дата 22.4.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Я бы не по теме хотел заметить, что ereg_* функции являются deprecated, и что надо использовать preg_*
PM MAIL   Вверх
WolfAlone
Дата 22.4.2011, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Символ "\" - это символ экранирования! То есть "\m" - означает: "Спецсимвол М". Такого спецсимвола я не припомню, но могу привести Вам другие примеры спецсимволов:

Код

\n - символ конца строки
\r - символ возврата каретки
\t - символ табуляции
\d - цифры (от 0 до 9)

и так далее...

Если Вы хотите получить символ "\" в тексте, то его стоит предварительно экранировать с помощью символа "\". То есть, получиться "\\" - что будет эквивалентно "\".

Думаю, Вам стоит ещё раз обратиться к документации и внимательно её прочитать (ссылку я дал выше).

Глава 3. Раздел "Спецсимволы". Последняя строка раздела:
Код

Аналогично, чтобы поставить два обратных слеша их надо тоже удвоить вот так: \\\\ 


Добавлено через 1 минуту и 29 секунд
P.S. Соответственно, что бы текст распознавался интерпретатором как "g\m" его нужно записывать как: "g\\m". А если Вы напишите, например так: "g\n" - это будет означать: "символ G за которым следует символ конца строки".


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
GQU
Дата 22.4.2011, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Цитата

P.S. Соответственно, что бы текст распознавался интерпретатором как "g\m" его нужно записывать как: "g\\m"

Я же так и написал
Код

<?php
$str='g\m';
if(ereg("g\\m",$str))             // тут 2 палки
echo 'Строка соответствует шаблону';     // Еще раз напоминаю, почему false
else
echo 'Строка не соответствует шаблону';
?>

Цитата

Я бы не по теме хотел заметить, что ereg_* функции являются deprecated, и что надо использовать preg_*


Сделаем тоже самое через preg_match()
Код

<?php
$str='g\m';
if(preg_match("/g\\m/",$str))
echo 'Строка соответствует шаблону';     
else
echo 'Строка не соответствует шаблону';
?>
в ответе false, в чем дело ?




Это сообщение отредактировал(а) GQU - 22.4.2011, 15:24
PM MAIL   Вверх
WolfAlone
Дата 22.4.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Цитата(GQU @  22.4.2011,  15:15 Найти цитируемый пост)
if(ereg("g\\m",$str))             // тут 2 палки

Я говорил вот об этой строке:
Код

$str='g\m';


Работает вот так:
Код

ereg('[g][\\][m]', $str)

То есть, после того, как каждый отдельный символ мы взяли в квадратные скобки (как и положено). Если Вы хотите сравнить непосредственно строку - для этого есть специально предназначенные функции, например: strcmp(); http://docs.php.net/manual/en/function.strcmp.php


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
GQU
Дата 22.4.2011, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Код

<?php
$str='\j';
if(ereg("^j$",$str))
echo 'Строка соответствует шаблону';    
else
echo 'Строка не соответствует шаблону';

?>


Почему тут false  ?

Это сообщение отредактировал(а) GQU - 22.4.2011, 16:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.