К основному контенту

Регулярные выражения

preg_match("шаблон_поиска", "строка_в_которой_проводится_поиск",
   массив_с_результами_поиска)

символьные классы [ ] описывают 1 символ.

Квантификаторы { } ставятся после классов [ ]
показывают количество итераций {},*,+,? литералов

Жадные квантификации

*; ?; +; {n,}

Ревнивые квантификации
*+; ?+; ++; {n,}+

группировка ( ) ставит приоритет операций

спец символ - позиция внутри строк, ставится в шаблоне

\Ba\B ; a\b; a$; ^a; \Ga
^, $ – начало и конец
\b – граница слова (а\b – буква а вконце)
\B – не граница слова
\G – предыдущий успешный поиск

 

Запоминание
( ) – в скобки запоминается результат, он выводится в результате \1 либо $1
Пример
“([1-8]{4})”, $string, “this result: \\1” – выводит 4е цифры в результат
“([a-z]{2})([1-8]{4})”, $string, “this result: \\1 \\2 вся строка \\0” – выводит 2е буквы потом 4е цифры и вконеце пишет всю строку заменяя \\0

СИМВОЛЬНЫЕ КЛАССЫ
Интервалы или символьные классы
указываются через дефис [a-b] можно так [a-ds-l] можно [1-2d-s]
Перечисления как символьный класс
символов просто в кВ скобках [abcdefg] или [dsgj4691]
Совмещение перечислений и интервалов
[a-d3214-6] – от а до d 3,2,1 и с 4 до 6.
Группа литералов
Пишется в скобках
Пример:
(string\sfirst\sok) будет три слова через пробелы.

Символьное отрицание
[^  крышка в квадратных скобках, обязательно вторая позиция, иначе крышка будет обычным литералом.
Примеры:
[^abs] – символ не а не b и не s
[^abs]{3} – три символа не b,a,s
[^ab^s]{3} – три символа не b,a,s тут используется литерал крышка перед s

Повторение (квантификация)
{цифра, цифра}
* - любое количество символов
Примеры:
[4-7]{3} – три цифры от 4 до 7 ;
[a-d]{2,7} – минимум 2е максимум 7 символов от а до d
[d-z]{2,} – минимум 2а символа от d до z
[d-z]+ - должен быть по карайней мере один символ тоже самое что и {1,}

Начало и конец СТРОКИ
^ начало строки
$ конец строки

Условия
указываются в квадратных скобках,
\s – пробел табулятор или перевод строки
\S – все что не входит в \s
\w – слово, в него входят все символы примерно такие [a-zA-Z]
\W – все что не входит в \w
\d – все цифры
\D – все что не входит в \d
. – все символы это точка
\. – символ точка перед ней ставить обратный слеш
В классе [.] точка как символ или как литерал

Разделители
Используются для того чтобы показать где начинаются/заканчиваются условия, или то что является регулярным вырожением, это могут быть разные символы, главное чтоб они были идентичными.
Пример
preg_match("/^[a-z0-9]/", $string,$mathces);

preg_match("/^[a-zA-Z0-9]+$/", $user)) условие при регистрации
плюс означает минимум один символ

примеры:
^[a-zA-Z][a-zA-Z0-9]*$ первый символ, второй может быть или нет любое количество раз
^$ - говорит о том что условие выполняется для всей строки

Оператор выбора
| выбирать можно между литералами или группами литералов
Пример:
preg_match("/^(be)|(not\sto\sbe)$/", $alternate, $answer);
s(o|u)n  это будет son или sun
чтобы отменить запоминание скобок, чтобы они не запоминали в память ничего
нужно указать последовательность ?:
пример
(?:be)|(?:not\sto\sbe)

Фамилия имя отчество  preg_match("/([^\s]+)\s+([^\s.])[^\s.]*(?:\s|\.)([^\s.])[^\s.]*/",$income_str,$out_arr);

     * [^\s] - любой символ, который не является пробелом! включая символ
       новой строки, можно было написать \S без крышки вначале
       символьного класса, но это на любителя.
     * [^\s]+ - минимум один символ, который не является пробелом, т.е.
       фамилию мы уже описали.
     * \s+ - минимум один пробел между фамилией и именем

     * [^\s] - все что не пробел, первый обязательный символ имени
       (сокращения)
     * [^\s.] - все что не пробел и не точка, в символьном классе точка -
       литерал
     * [^\s.]* - в случае полного имени, это будет означать, что надо
       найти все, что не точка и не пробел и идет после обязательного
       первого символа имени, который мы описали выше
Позитивные и негативные проверки

Ретроспективная проверка
(?<=) позитивная ретроспектива
(?<!) негативная ретроспектива

Опережающая проверка
(?=) позитивная опережающая проверка
(?!) негативная опережающая проверка
После ? идет символ который описывает действие
пример
(?=) справа от знака значит строка справа должна совпасть с выражением в скобках
(?<!<TD>)  перед ценой не должно стоять <TD> (негативная ретроспектива)

(?!<\/B>) справа от цены недолжно быть тега </B>

preg_match_all("/(?<!<TD>)(?<=>)\d*\.\d*(?!<\/B>)(?=<\/A>)/", $string, $matches);

Жадные и ленивые квантификаторы
*? – это ленивый

!<div id='laiko_sriftas'>(.*?)</div>!
Возвращается массив [1] здесь внутренние значение [0] здесь строка целая

if (preg_match("!<title>(.*?)</title>!si",$string,$ok))
   echo "Тег найден, текст: $ok[1]";
else
   echo "Тег не найден";

$ok[0]  будет строки вместе с тегами <title></title>
$ok[1] будут все строки внутри тегов <title></title>
Здесь используется ленивая квантификация,

Мне нужно было выделить заголовки и время в тексте где встречалось слово Фильм и Сериал:

06:00 "Неизвестная планета": "Вьетнам: путешествие в страну девяти драконов"
06:30 "Новости 24 - Набережные Челны"
06:45 "РЕНтабельные ЛЮДИ"
07:00 "Экстренный вызов"
07:30 "Званый ужин" ФильМ
08:30 "Солдаты - 6" Комедийный сериал
09:30 "Новости 24"
10:00 "Честно": "Продам себя по частям"
11:00 "Час суда с Павлом Астаховым"
12:00 "Экстренный вызов"
12:30 "Новости 24"
13:00 "Званый ужин"
14:00 "Давай попробуем?"
15:00 "Час суда с Павлом Астаховым"
16:00 "Экстренный вызов"
16:30 "Новости 24"
17:00 "Улицы разбитых фонарей. Новые приключения ментов" Сериал
18:00 "Экстренный вызов"
18:30 "Честно": "Жилье-жулье"
19:30 "Новости 24 - Набережные Челны"
20:00 "Громкое дело"
20:30 ПРЕМЬЕРА. "Черкизона. Одноразовые люди" Сериал
21:30 "Дорогая передача"
22:30 "Справедливость"
23:30 "Новости 24 - Набережные Челны"
00:00 "Честно": "Жилье-жулье"
01:00 "Кино": Куба Гудинг-младший, Том Беренджер в триллере "Убийство ворон" (США)
02:55 "Покер-Дуэль"
03:45 "Морская душа" Сериал
04:40 "Детективные истории": "Секрет криминалиста"
05:15 "Неизвестная планета": "Вьетнам: путешествие в страну девяти драконов"
05:40 Ночной музыкальный канал

11 ИЮНЯ, ПЯТНИЦА

06:00 "Неизвестная планета": "Безобразие красоты"
06:30 "Новости 24 - Набережные Челны"
07:00 "Экстренный вызов"
07:30 "Званый ужин"
08:30 "Солдаты - 6" Комедийный сериал
09:30 "Новости 24"
10:00 "Честно": "Жилье-жулье"
11:00 "Час суда с Павлом Астаховым"
12:00 "Экстренный вызов"
12:30 "Новости 24"
13:00 "Званый ужин"
14:00 "Давай попробуем?"
15:00 "Час суда с Павлом Астаховым"
16:00 "Экстренный вызов"
16:30 "Новости 24"
17:00 "Улицы разбитых фонарей. Новые приключения ментов" Сериал
18:00 "Экстренный вызов"
18:30 "Честно": "Родившие вопреки"
19:30 "Новости 24 - Набережные Челны"
20:00 "Громкое дело"
20:30 "Кино": Арнольд Шварценеггер в боевике "Шестой день" (США)
22:50 "Фантастика под грифом "Секретно": "Чудеса. Доказательств не требуется"
23:30 "Новости 24 - Набережные Челны"

реализовал так:

([^\:][0-9]{2}\s(.*))
([0-9]{2}:[0-9]{2})

preg_replace("/(\B[^\:][0-9]{2}\s(.*))/","<b><span style=\"background-color:#0FF\">\\1</span></b>",$this->input->post('text'));
и
nl2br(preg_replace("/([0-9]{2}:[0-9]{2})(?=.*Сериал|.*фильм)/i","<b><span style=\"background-color:#0FF\">\\1</span></b>",$r));

а потом ввел все в одну функцию так:

nl2br(preg_replace("/(([0-9]{2}:[0-9]{2})(?=.*Сериал|.*фильм)|(\B[^\:][0-9]{2}\s(.*)))/i","<b><span style=\"background-color:#0FF\">\\1</span></b>",$r));

Где:

/i  - ключ не учитывать регистр
{} – квантификатор повторение цифр по два раза
\: – символ двоеточия в классе
\B – не начало строки
(?=) – просмотр вперед или назад в моем случае выражение слева это при встрече слова Сериал просмотр позитивный просмотр вперед времени.
(()|()) сохраняется только одно из двух значений одна скобка – один результат который выводится в \\1

для InDesing регулярные выражения выглядят так:

1) ([0-9]{2}:[0-9]{2})(?=.*сериал|.*фильм) (?i)

3) ([0-9]{2}.[0-9]{2})(?=.*сериал|.*Фильм) (?i)

2) (^[0-9]{2} (.*))

(?i) – режим не учитывающий регистр

так можно легко изменять все что угодно

image

Комментарии

Популярные сообщения из этого блога

Русская кодировка ASCII, ANSI и UTF-8, windows-1251 (CR, LF, CR LF)

Что нужно знать: Encoding – это кодировка для вывода данных (UTF-8, windows-1251) Line Endings – формат строк (CR, LF, CR LF) Byte Order Marker (BOM) – системная область в начале файла. LF – используется в UNIX вместе с кодировками UTF-8 или windows-1251 CR – используется в MAC системах. на сервере лучше использовать кодировку ANSI это и есть кириллица (Windows), символ занимает 1 байт (оптимизированный ASCII) UTF-8 может содержать заголовок BOM который содержит системную информацию, символ занимает 2 байта wysiwyg редакторы добавляют метатег в html страницы с кодировкой кирилицы. это не очень хорошо, если сервер настроен на UTF-8, в этой кодировке корректно работают некоторые библиотеки приложения и прочие

Как узнать время включения/выключения компьютера.

Способов масса, одни из них: в журнале событий windows  выбрать eventlog, теперь в таблице легко найти события с кодами: 6005 - событие остановки eventlog - компьютер выключился 6006 - событие запуска eventlog - компьютер включился обычно эта служба запускается и остонавли во время включения/выключения компьютера, и пишет в журнале событий системы код события и время.

Извлечение, редактирование и публикация файлов в SharePoint

Теги: Sharepoint в sharepoint designer на ленте за извлечение / редактирование или отмену извлечений отвечают кнопки  в браузере это выглядит по другому   файл извлечен и пока редактируется пользователем   страница с индивидуальным дизайном возврат страницы с индивидуальным дизайном к определению узла (к первоначальному виду не изменяя веб-части) Возврат извлеченной страницы с отменой всех внесенных изменений Изначально извлечение было создано для исключения конфликтов при редактировании файлов. Например если один пользователь открыл документ и редактирует, то второй не сможет открыть пока первый не вернет документ на место. Простыми словами извлечение значит, что пользователь забирает документ для редактирования. И возвращает после окончания редактирования. Само редактирование может выполняться и без подключения к сети, документ хранится в черновиках моих документов. В официальной документации сказано: Извлечение файлов позволяет избежать ситуации, когда несколь