xpert13
<(*_*)>
- Регистрация
- 7 Ноя 2008
- Сообщения
- 182
- Реакции
- 469
- Автор темы
- #1
Особенности данной темы
Часть информации по валлидации взята из этой статьи Для просмотра ссылки Войдиили Зарегистрируйся (спасибо Для просмотра ссылки Войди или Зарегистрируйся)
В этой теме описаны решения популярных проблем в парсинге, замене текстов и т.д. Другими словами то, с чем прекрасно справляются регулярные выражения. Тема расчитана на новичков, тех кто плохо разбирается в регулярных выражениях и тех, кто в них вообше не разбирается, но нуждается в решении простой задачи.
Так как регулярные выражения используются в разных языках программирования и разных редакторах по разному, в этой теме будет использоваться самый популярный синтаксис - PERL.
Как использовать эти выражения в PHP
[spoil]Регулярное выражение надо поместить между парных символов... Символ (обычно "/") : любой символ, кроме букв, цифр и пропусков (пробел, перевод каретки и т.д.). Желательно (надо так выбрать), чтобы этот символ не встречался в самом регулярном выражении, иначе его придется слешить.
Пример 1: /<img\s+[^>]*>/i
Пример 2 (если в регулярном выражении есть символ "/") : #<a\s+[^>]*>(.*?)</a>#i
Как вы возможно заметили, в конце каждого выражения есть буква "i", это модификатор регулярного выражения (именно ради того, чтобы отделить регулярное выражения и модификаторы и необходимо обрамление парными символами) который указывает на то, что регулярное выражение будет регистронезависимым [/spoil]
Как использовать эти выражения в notepad++
[spoil]Тут еще проще чем в PHP, единственное отличие от Перла в том, что при замене группы указываются не со знаком доллара ($), а со слешем, например было так "$1", а в notepad++ нужно так "\1" [/spoil]
[/spoil]
I. Удаление из текста
1. Удалить все ссылки
[spoil]Найти: <a\s+[^>]*>(.*?)</a>
Заменить на: $1[/spoil]
2. Удалить все картинки
[spoil]Найти: <img\s+[^>]*>
Заменить на:
[/spoil]
3. Заключить в noindex и nofollow ссылки в тексте
[spoil]Найти: <a\s+([^>]+)>([^<]*)</a>
Заменить на: <noindex><a $1 rel="nofollow">$2</a></noindex>
Примечание: Регулярка не проверяет наличие noindex и nofollow в тексте, потому запускать её можно только для текстов, где гарантировано нету этих тегов
[/spoil]
4. Добавить тег <br /> после каждого абзаца
[spoil]Найти: ([\n\r]+)
Заменить на: <br />$1[/spoil]
5. Как убирать дату вида: XX.XX.XXXX
[spoil]Найти (вариант 1): \d{2}\.\d{2}\.\d{4}
Найти (вариант 2): \d{1,2}\.\d{1,2}\.\d{4}
Заменить на:
Примечание: вариант 1 используется когда все даты имеют строгий формат - 2 цифры дня, 2 цифры месяца и 4 года, а вариант 2 - когда день и месяц могут быть одноциферными
[/spoil]
6. Убрать из тега <img> все атрибуты кроме "src"
[spoil]Найти: <img\s+[^>]*(src=['"][^'^"]*['"])[^>]*>
Заменить на: <img $1 />[/spoil]
7. Убрать пустые строки в тексте
[spoil]Найти: [\r\n]+
Заменить на: \r\n
Примечание: в зависимости от операционной системы, в заменить нужно вписывать разные значения. Для Windows ОС это "\r\n", для Unix "\n", для Mac "\r". Если вы сделаете не верный выбор, то в зависимости от ОС либо не увидите вообще переносов, либо увидите лишние переносы. В этом случае поможет повторный запуск регулярки только уже с другим значением параметра "Заменить на"
[/spoil]
8. Удалить все атрибуты тега
[spoil]Найти: <(ИМЯ_ТЕГА)\s[^>]+>
Заменить на: <$1>
Примечание: ИМЯ_ТЕГА необходимо заменить на имя вашего тега, параметры которого хотите очистить. Например: "<(div)\s[^>]+>". Допускаются так же конструкции перебора, которые позволяют с помощью одного регулярного выражения очистить несколько видов тегов, например: "<(div|p|strong)\s[^>]+>"
[/spoil]
9. Удалить весь текст до определенного слова, после определенного слова и между словами
[spoil]Найти (до слова): [\W\w]*(СЛОВО)
Найти (после слова): (СЛОВО)[\W\w]*
Заменить на: $1
Найти (между словами): (СЛОВО1)[\W\w]*(СЛОВО2)
Заменить на: $1$2
Примечание: СЛОВО (СЛОВО1 и СЛОВО2) необходимо заменит на нужные вам слова (или даже словосочетания). В зависимости от того, нужно вам после удаления оставлять эти слова корректируйте значение "Заменить на" (заполняйте как я если нужно, либо оставьте пустым если не нужно)
[/spoil]
10. Как заключить картинки в <div style="text-align:center">...</div>
[spoil]Найти: (<img\s+[^>]*>)
Заменить на: <div style="text-align:center">$1</div>
[/spoil]
11. Удалить определенное количество первых строк
[spoil]Найти: ([^\r\n]+[\r\n]+){КОЛИЧЕСТВО}(.*)
Заменить на: $2
Примечание: КОЛИЧЕСТВО необходимо заменить на нужное вам число строк, которое необходимо удалить
[/spoil]
II. Поиск текста (парсинг)
1. Получить текст между определенными тегами
[spoil]Найти: <(ИМЯ_ТЕГА)>(.*?)</\1>
Примечание: ИМЯ_ТЕГА необходимо заменить на нужное вам имя. Результат будет хранится во второй группе
[/spoil]
2. Получить все ссылки (адрес ссылки и анкор)
[spoil]Найти: <a\s+[^>]*href=['"]([^'^"]+)['"][^>]*>(.*?)</a>
Примечание: адрес ссылки будет в первой группе, а анкор во второй
[/spoil]
3. Получить все адреса картинок
[spoil]Найти: <img\s+[^>]*src=['"]([^'^"]+)['"][^>]*>
Примечание: адрес картинки будет в первой группе
[/spoil]
III. Валидация распространенных видов данных
1. Номер кредитки
[spoil][0-9]{13,16} [/spoil]
2. ICQ
[spoil]([1-9])+(?:-?\d){4,}[/spoil]
3. Набор из букв и цифр (латиница)
[spoil]^[a-zA-Z0-9]+$[/spoil]
4. Набор из букв и цифр (латиница + кириллица)
[spoil]^[а-яА-ЯёЁa-zA-Z0-9]+$[/spoil]
5. Домен (например abcd.com)
[spoil]^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$[/spoil]
6. IPv4
[spoil]((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)[/spoil]
7. IPv6
[spoil]
[/spoil]
8. Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква)
[spoil]^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$[/spoil]
9. Пароль (Строчные и прописные латинские буквы, цифры)
[spoil]^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$[/spoil]
10. Пароль (Строчные и прописные латинские буквы, цифры, спецсимволы. Минимум 8 символов)
[spoil](?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$[/spoil]
11. Дата в формате YYYY-MM-DD
[spoil][0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])
Более строгая проверка, предложенная runcore:
(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31)[/spoil]
12. Дата в формате DD/MM/YYYY
[spoil](0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d[/spoil]
13. Целые числа и числа с плавающей точкой (разделитель точка)
[spoil]\-?\d+(\.\d{0,})?[/spoil]
14. UUID
[spoil]^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$[/spoil]
15. Широта или долгота
[spoil]-?\d{1,3}\.\d+[/spoil]
16. E-mail
[spoil]^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$[/spoil]
17. URL на латинице
[spoil]
Примечание: Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «рф»
[/spoil]
18. Время в формате HH:MM:SS
[spoil]
[/spoil]
19. Mac-адрес
[spoil]
Так как регулярные выражения используются в разных языках программирования и разных редакторах по разному, в этой теме будет использоваться самый популярный синтаксис - PERL.
Как использовать эти выражения в PHP
[spoil]Регулярное выражение надо поместить между парных символов... Символ (обычно "/") : любой символ, кроме букв, цифр и пропусков (пробел, перевод каретки и т.д.). Желательно (надо так выбрать), чтобы этот символ не встречался в самом регулярном выражении, иначе его придется слешить.
Пример 1: /<img\s+[^>]*>/i
Пример 2 (если в регулярном выражении есть символ "/") : #<a\s+[^>]*>(.*?)</a>#i
Как вы возможно заметили, в конце каждого выражения есть буква "i", это модификатор регулярного выражения (именно ради того, чтобы отделить регулярное выражения и модификаторы и необходимо обрамление парными символами) который указывает на то, что регулярное выражение будет регистронезависимым [/spoil]
Как использовать эти выражения в notepad++
[spoil]Тут еще проще чем в PHP, единственное отличие от Перла в том, что при замене группы указываются не со знаком доллара ($), а со слешем, например было так "$1", а в notepad++ нужно так "\1" [/spoil]
[/spoil]
I. Удаление из текста
1. Удалить все ссылки
[spoil]Найти: <a\s+[^>]*>(.*?)</a>
Заменить на: $1[/spoil]
2. Удалить все картинки
[spoil]Найти: <img\s+[^>]*>
Заменить на:
[/spoil]
3. Заключить в noindex и nofollow ссылки в тексте
[spoil]Найти: <a\s+([^>]+)>([^<]*)</a>
Заменить на: <noindex><a $1 rel="nofollow">$2</a></noindex>
Примечание: Регулярка не проверяет наличие noindex и nofollow в тексте, потому запускать её можно только для текстов, где гарантировано нету этих тегов
[/spoil]
4. Добавить тег <br /> после каждого абзаца
[spoil]Найти: ([\n\r]+)
Заменить на: <br />$1[/spoil]
5. Как убирать дату вида: XX.XX.XXXX
[spoil]Найти (вариант 1): \d{2}\.\d{2}\.\d{4}
Найти (вариант 2): \d{1,2}\.\d{1,2}\.\d{4}
Заменить на:
Примечание: вариант 1 используется когда все даты имеют строгий формат - 2 цифры дня, 2 цифры месяца и 4 года, а вариант 2 - когда день и месяц могут быть одноциферными
[/spoil]
6. Убрать из тега <img> все атрибуты кроме "src"
[spoil]Найти: <img\s+[^>]*(src=['"][^'^"]*['"])[^>]*>
Заменить на: <img $1 />[/spoil]
7. Убрать пустые строки в тексте
[spoil]Найти: [\r\n]+
Заменить на: \r\n
Примечание: в зависимости от операционной системы, в заменить нужно вписывать разные значения. Для Windows ОС это "\r\n", для Unix "\n", для Mac "\r". Если вы сделаете не верный выбор, то в зависимости от ОС либо не увидите вообще переносов, либо увидите лишние переносы. В этом случае поможет повторный запуск регулярки только уже с другим значением параметра "Заменить на"
[/spoil]
8. Удалить все атрибуты тега
[spoil]Найти: <(ИМЯ_ТЕГА)\s[^>]+>
Заменить на: <$1>
Примечание: ИМЯ_ТЕГА необходимо заменить на имя вашего тега, параметры которого хотите очистить. Например: "<(div)\s[^>]+>". Допускаются так же конструкции перебора, которые позволяют с помощью одного регулярного выражения очистить несколько видов тегов, например: "<(div|p|strong)\s[^>]+>"
[/spoil]
9. Удалить весь текст до определенного слова, после определенного слова и между словами
[spoil]Найти (до слова): [\W\w]*(СЛОВО)
Найти (после слова): (СЛОВО)[\W\w]*
Заменить на: $1
Найти (между словами): (СЛОВО1)[\W\w]*(СЛОВО2)
Заменить на: $1$2
Примечание: СЛОВО (СЛОВО1 и СЛОВО2) необходимо заменит на нужные вам слова (или даже словосочетания). В зависимости от того, нужно вам после удаления оставлять эти слова корректируйте значение "Заменить на" (заполняйте как я если нужно, либо оставьте пустым если не нужно)
[/spoil]
10. Как заключить картинки в <div style="text-align:center">...</div>
[spoil]Найти: (<img\s+[^>]*>)
Заменить на: <div style="text-align:center">$1</div>
[/spoil]
11. Удалить определенное количество первых строк
[spoil]Найти: ([^\r\n]+[\r\n]+){КОЛИЧЕСТВО}(.*)
Заменить на: $2
Примечание: КОЛИЧЕСТВО необходимо заменить на нужное вам число строк, которое необходимо удалить
[/spoil]
II. Поиск текста (парсинг)
1. Получить текст между определенными тегами
[spoil]Найти: <(ИМЯ_ТЕГА)>(.*?)</\1>
Примечание: ИМЯ_ТЕГА необходимо заменить на нужное вам имя. Результат будет хранится во второй группе
[/spoil]
2. Получить все ссылки (адрес ссылки и анкор)
[spoil]Найти: <a\s+[^>]*href=['"]([^'^"]+)['"][^>]*>(.*?)</a>
Примечание: адрес ссылки будет в первой группе, а анкор во второй
[/spoil]
3. Получить все адреса картинок
[spoil]Найти: <img\s+[^>]*src=['"]([^'^"]+)['"][^>]*>
Примечание: адрес картинки будет в первой группе
[/spoil]
III. Валидация распространенных видов данных
1. Номер кредитки
[spoil][0-9]{13,16} [/spoil]
2. ICQ
[spoil]([1-9])+(?:-?\d){4,}[/spoil]
3. Набор из букв и цифр (латиница)
[spoil]^[a-zA-Z0-9]+$[/spoil]
4. Набор из букв и цифр (латиница + кириллица)
[spoil]^[а-яА-ЯёЁa-zA-Z0-9]+$[/spoil]
5. Домен (например abcd.com)
[spoil]^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$[/spoil]
6. IPv4
[spoil]((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)[/spoil]
7. IPv6
[spoil]
Код:
((^|:)([0-9a-fA-F]{0,4})){1,8}$
8. Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква)
[spoil]^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$[/spoil]
9. Пароль (Строчные и прописные латинские буквы, цифры)
[spoil]^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$[/spoil]
10. Пароль (Строчные и прописные латинские буквы, цифры, спецсимволы. Минимум 8 символов)
[spoil](?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$[/spoil]
11. Дата в формате YYYY-MM-DD
[spoil][0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])
Более строгая проверка, предложенная runcore:
(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31)[/spoil]
12. Дата в формате DD/MM/YYYY
[spoil](0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d[/spoil]
13. Целые числа и числа с плавающей точкой (разделитель точка)
[spoil]\-?\d+(\.\d{0,})?[/spoil]
14. UUID
[spoil]^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$[/spoil]
15. Широта или долгота
[spoil]-?\d{1,3}\.\d+[/spoil]
16. E-mail
[spoil]^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$[/spoil]
17. URL на латинице
[spoil]
Код:
~^(?:(?:https?|ftp|telnet:(//(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:ru|su|com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&?+=\~/-]*)?(?:#[^ '\"&]*)?$~i
Примечание: Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «рф»
[/spoil]
18. Время в формате HH:MM:SS
[spoil]
Код:
^([0-1]\d|2[0-3]:()[0-5]\d){2}$
19. Mac-адрес
[spoil]
Код:
([0-9a-fA-F]{2}([:-]|$)){6}$|([0-9a-fA-F]{4}([.]|$)){3}
Часть информации по валлидации взята из этой статьи Для просмотра ссылки Войди