- RU.PHP.CHAINIK --------------------------------------------- RU.PHP.CHAINIK -
Msg : #2525 [501]
От : Mithgol the Webmaster 2:5020/830.27 26 ноября 04, 12:15
Кому : Varavva Yevgen aka xa4anypu 28 ноября 04, 03:10
Тема : Опять РегЕксп
-------------------------------------------------------------------------------
Так было 15:03 25 Nov 04 написано от Yevgen Varavva к Mithgol the Webmaster:
>> YV> нужно извлечь верхнюю папку, то есть так: если дан
>> YV> /some/url/here/index.php,
>> YV> то должен остаться только some, а если "/" то он и остается.
>> используй assertion для второго слэша
>>
>> \/([^\/]+(?=\/))?
YV> Большое спасибо. А можно объяснить как оно работает? :)
Можно.
YV> Я так понял, что сначала идет "/" а потом может идти еще что-то, а может
YV> и не идти, но если идет, то только до следующего "/". Так?
После первых скобок стоит знак вопроса -- стало быть, может не идти вообще всё,
что в этих скобках изложено.
Если же идёт, то спервоначалу идёт последовательность не-слэшей (не-"/") --
причём состоящая, как минимум, из одного не-слэша (потому что после неё плюс).
Эта последовательность идёт до следующего "/" и не далее -- уже по одному тому,
что этот символ (слэш, "/") прервёт её, поскольку она содержит только символы,
не являющиеся "/".
А регэксп (?=\/) надобен потому только, чтобы удостовериться, что за нею идёт
именно "/", что именно слэш её прервёт, а не какая-нибудь другая ерунда типа
конца строки, как было бы с именами файлов в корневом каталоге.
Форма записи (?=\/) надобна потому, что этот очередной слэш мы не захватываем:
мы просто хотим убедиться, что он следующий, а помещаться в результат поиска он
не будет.
Ceterum censeo Diptaunum esse delendam! http://mithgol.pp.ru/
Mithgol the Webmaster. [Team В эхолисте ,,ё`` уместим] [Team А я меняю subj]
... {3} Hикогда не читайте вслух заклинаний, призывающих демонов, даже в шутку
--- Эшелону: Gatt на платформе 1911 Geraldton UKUSA veggie XM Парвус NAVSVS
* Origin: ибо духовно могущественен и нравственно воцерковлен (2:5020/830.27)