Где-то тут уже просил/предлагал ввести этот шаблон... но либо неубедителен был со своей просьбой, либо пример использования не привел... уже не помню точно.Skif_off wrote: Возможно ли прикрутить к движку регэкспов поддерку \K, как в PCRE?
Попробую привести пример использования. Откуда взял пример, тоже не помню, но пример хороший, особенно, если массив текста будет большим...
Есть массив текста в котором встречается, например ссылка _http:\\serv134.en.prizee.com
Нам надо постараться выражением выделить только цифры после serv.
Если написать интуитивно понятное правило
serv\d+\.en\.prizee\.com
то результатом будет serv134.en.prizee.com
Но нам ведь нужны только цифры. Как их выделить?
\K делает так, что все то, что находится до нее, в итоговую подстроку не попадает.
Т.е. правило serv\K\d+\.en\.prizee\.com
оставит в итоге только 134.en.prizee.com
Уже ближе.
(?=...) позволяет заглянуть дальше по строке вперед и проверить, есть ли там то, что указано в скобках после ?=. Но это что-то хоть и проверяется, но в итоговую строку не пишется.
Получается, serv\K\d+(?=\.en\.prizee\.com)
вернет нам serv134.en.prizee.com за вычетом того, что находится до \d+ и после \d+, т.е. только нужные цифры 134.
Не просто интересная, но и необходимая в некоторых случаях, т.к. существующий просмотр назад имеет ограничение, т.е. шаблон должен быть фиксированным, а \K позволяет не учитывать в итоговой строке всё, что было найдено до необходимого шаблона, в вышеприведенном примере это \d+, причем без каких-либо ограничений...Skif_off wrote:Подозреваю, можно решить задачу с помощью (?=шаблон) или (?<=шаблон), но очень уж интересная штука...
Да, одну и ту же задачу можно решать разными способами, но если есть способ попроще, то почему бы им не воспользоваться...
Правда в реализации каких-либо идей, есть кроме желаний пользователей ещё и другие факторы влияющие на сам факт реализации: это и мнение автора программы, и наличие свободного времени у него, и естественно, возможность программной реализации в принципе. Пока не видел отрицания того, что это возможно реализовать, так что будем подождать, может всё таки, когда-нибудь сойдутся все факторы в одном месте...