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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения, обучение 
:(
    Опции темы
Black
Дата 11.6.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Цитата
\s+\[логин\]\:\фраза

все равно это немного не то, я бы так решил свою задачу:

Код

<?
$str = " fgfsg [admin]: fer fgdf fgdfgdf fwf";
if(ereg(".*\[([a-zA-Z0-9]{1,})\]:.*", $str, $matches))  {}
else { echo "Нет совпадений"; }
echo "$matches[1]";
?>


Тоже использую POSIX smile


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
IZ@TOP
Дата 11.6.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



PHP-DIRECTOR, а как на счет строки "________[IZ@TOP]: А я тут подумал и решил написать проверочку ___[ADMIN]: Ha-ha-ha...".
Добавлено @ 14:33
PHP-DIRECTOR, этот прег пожалуй должен работать без проблем:

Код

preg_match("|\[(.*?)\]\:.+|s", $str, $matches)

Добавлено @ 14:35
А на счет того что PCRE это оцтой, я скажу что это выдумки тех людей которые изучили POSIX стандарт и не могут понять PCRE. Я когда новичком был использовал POSIX и в данный момент считаю его именно "для новичков".


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
PARROT
Дата 11.6.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



PHP-DIRECTOR, дело в том что в книге до использования ereg я еще не дошла.
Думаю сначала нужно научиться понимать, то что пишешь, то есть изьясняться на REGESP.
А вот позже, займемся функциями замены и т.д.
И как говорится в книге, что единственно правильного решения не бывает, главное что бы оно было правильным!
Ну что ж продолжим?


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
PARROT
Дата 11.6.2005, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Mal Hack, далее:
Код

4. [\w]
    [a-zA-Z] //тут вариантов может быть много
5. ^[F][^LKJH][F]$// поидее он должен работать, так как [^LKJH] означает все кроме этого, просьба разжевать, плиз.
6. ^[F.][^LKJH][.F]$// тоже объясни плиз, точка  это любой символ.

   .   любой символ
   ^ начало строки
   $  конец строки



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Black
Дата 11.6.2005, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



IZ@TOP
Цитата
PHP-DIRECTOR, а как на счет строки "________[IZ@TOP]: А я тут подумал и решил написать проверочку ___[ADMIN]: Ha-ha-ha...".

не понял??? нормально все вырезается... не вырежется только если будут символы перевода строки, которых не бывает в чате. А так все что хочешь пиши будет работать smile

Сам проверь:

Код

<?
$str = "___[ADMIN]: Ha-ha-ha...";
if(ereg(".*\[([a-zA-Z0-9]{1,})\]:.*", $str, $matches))  {}
else { echo "Нет совпадений"; }
echo "$matches[1]";
?>


возвращает ADMIN

А то что Изапота не пускает так есть символ @ - а он типа запрещен smile (IZ@TOP)

Это сообщение отредактировал(а) PHP-DIRECTOR - 11.6.2005, 16:36


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Aliance
Дата 13.6.2005, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Если было - сильно не бейте. Вот чтобы мне пригодилось:
  • поиск ссылки и подстановка к ней http://
  • поиск спец. символов и их замена на Юникод (" == &quot; ... © == &copy; и т.д....)
Спасибо =)
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.6.2005, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Aliance @ 13.6.2005, 18:39)
поиск спец. символов и их замена на Юникод (" == &quot; ... © == &copy; и т.д....)

Это через str_replace лучше сделать.

Цитата(Aliance @ 13.6.2005, 18:39)
поиск ссылки и подстановка к ней http://

http://forum.vingrad.ru/index.php?showtopi...view=getnewpost там глянь. Тебе нужно просто найти что-то не с http:// и заменить через preg_replace на тоже с http:// впереди.
PM ICQ   Вверх
PARROT
Дата 13.6.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Mal Hack, можно объяснить более подробно?
Мы же тут учимся. Я например незнаю как найти ссылку и подставить к ней http:
Как выглядит ссылка? Как подставить? smile
Всю книгу перекопала, нашла все кроме того что нужно.
Плиз, а? smile


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 13.6.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Ну как же девушке можно отказать.. Вот тебе и задание.
Ссылка - это набор латинских символов, точек и дефисов, причем не может начинаться с - или точки и заканчиваться..
Выше я ссылки привел на примеры.
Если хочешь можешь сама поломать голову.
Личноя точно помню, что нормальный рэг на ссылки я написал раз на 20.
Добавлено @ 20:10
В догонку.. Ссылка (домен) заканчивается на . и два - четыре латинских символа.
PM ICQ   Вверх
PARROT
Дата 13.6.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



http[s]?:[//\w.][\w_-.][\w.][\w]{2,4} Это писала без книги, ща напишу с книгой.
А куда дефис толкать?

Вот мой нашелся так:
Код

http[s]?://[\w.]+[\w.]+[\w.]+[\w]{2,4}

http://www.traktora.spb.ru

А вот с подчеркиванием и тире:
Код

http[s]?://[\w.]+[\w_.]+[\w.]+[\w]{2,4}

http://www.traktora_avtodiesel.spb.ru

Код

http[s]?://[\w.]+[\w-.]+[\w.]+[\w]{2,4}
http://www.traktora-avtodiesel.spb.ru

Код

http[s]?://[\w.]+[\w-.]+[\w.]+[\w]{3}
https://www.traktora-avtodiesel.com

А что значит нормальный Рег? И как найти ссылку, добавив http:// ???

Это сообщение отредактировал(а) PARROT - 13.6.2005, 20:47


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
mr.Anderson
Дата 14.6.2005, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Эээ... Извиняюсь! Можно мне вмешаться? Я тоже решил попробовать поучить регулярки, вот, попробовал написать код запрета html-тегов (результат - все теги стираются):
Код

<form method=post>
<h4>Запрет на html-теги</h4>
<textarea name="text3"></textarea><br>
<input type="submit" name="submit3">
</form>

Код

if(isset($_POST['submit3']))
{
 if(ereg("[&<>/\]",$text3))
 {
 echo "Вы использовали html-теги! Они будут стерты.<br>";
 $newtext3=ereg_replace("[&</\([:alnum:]+)>]","",$text3);
 echo "Все исправлено. Исправленный текст:<br>$newtext3";
 }
 else echo "HTML-теги не использовались. Вы ввели:<br>$text3";
}

Прошу оценить - правильно ли все? Я его как написал, этот код, сейчас даже сам не вполне понимаю, почему он работает... smile
Кстати, еще вопросы по регуляркам:
1) Как в регулярках учесть пробелы?
2) Задача: есть файл. Нужно считать его и заменить все символы "[]" на символы "<>". Я понимаю, надо ereg_replace использовать, только как в этот ereg_replace подставить строчки файла? Не понимаю. Прошу помочь и оценить!


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
PARROT
Дата 14.6.2005, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



sim7, а мой тестер на твою регулярку сильно ругается!
Ты искал совпадение?
Мой тестер совпадения не нашел!
Можешь объяснить мне свою регулярку?
Для чего и какие символы ты использовал в написании?


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
mr.Anderson
Дата 14.6.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Цитата
[&</\([:alnum:]+)>]

smile Объяснить? Ну, хорошо. Значит, стираются символы амперсанда, а также все символы (включая буквы и цифры), находящиеся между <>. Между <> также могут быть слэши. Потом, на локальном сервере у меня все работает без проблем. Пробовал набирать "&quot" (без кавычек), а также любые последовательности между < и >. Все стиралось, включая и эти самые <>. Сочетание &quot также стирается полностью. Все работает на "ура", по крайней мере, у меня.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
PARROT
Дата 14.6.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



sim7, вместо [:alnum:], лучше писать так [a-zA-Z0-9]
POSIX............... Лучше Perl-овый PRCE, будет работать везде.

Вопрос: А что ты искал?
Зачем стирать? Нужно просто запрещать пользоваться тегами, где это не положено, помоему... или я не права?
Стереть проще так $nm=strip_tags($nm);


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
mr.Anderson
Дата 14.6.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Это я просто тренируюсь, со стиранием. Я ж говорю, только сегодня начал пробовать регулярку учить. Поэтому и стараюсь усложнять до своего максимума. Чтобы затрагивать и другие функции тоже. Можно было, конечно, написать и так:
Код

if(ereg("[&<\/[a-zA-Z0-9]>]",$text3))
{
echo "HTML запрещен!";
exit;
}

Просто мне хотелось с перезаписью.
А можете ответить на вопросы, которые я задавал в первом посте? Как делать пробелы и как выполнить описанную мной задачу?
Плюс еще вопрос. Как заставить регулярку учитывать последовательность возможных совпадений? Например, чтобы сначала шло <, потом / или \, потом цифра/буква и т.д.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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