За последние 24 часа нас посетили 20089 программистов и 1670 роботов. Сейчас ищут 1856 программистов ...

Голова закипает. Очень прошу разъяснений.

Тема в разделе "Регулярные выражения", создана пользователем Dima4321, 21 дек 2010.

  1. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Пример взят отсюда

    http://www.phpclub.ru/detail/article/regexp_1

    есть текст

    PHP:
    1. фамилия имя отчество
    2. фамилия и о
    3. фамилия и.о.
    Сама регулярка для поиска всех вхождений.

    PHP:
    1.  preg_match("/([^\s]+)\s+([^\s.])[^\s.]*(?:\s|\.)([^\s.])[^\s.]*/",$income_str,$out_arr);
    2. print_r($out_arr);
    никак не могу понять

    почему эта последовательность
    PHP:
    1. [^\s.][^\s.]*
    может соотв-ть
    PHP:
    1. о.
    или просто
    PHP:
    1. о
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    [^\s.] - не пробел и не точка. буква т.е.

    разберём по частям
    /([^\s]+)\s+([^\s.])[^\s.]*(?:\s|\.)([^\s.])[^\s.]*/

    ([^\s]+) - подряд идущие буквы - берём фамилию

    \s+ - один или несколько пробелов - нас не интересуют

    ([^\s.]) - одна буквы - берём инициал имени

    [^\s.]* - может буквы и дальше быть, а могут и не быть, нам пофиг, брать не будем

    (?:\s|\.) - или пробел или точка - инициал/имя закончились, нам пофиг, пропускаем

    ([^\s.])[^\s.]* - инициал отчества, так же как и инициал имени - берётся только первая буква
     
  3. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    ООосподи счасть то каое спасибо Gromo

    про имя
    ([^\s.]) [^\s.]* ---етить колотить я забыл что звездочка озночает и ноль тоже )) Слона и не заметил

    про отчество

    ([^\s.])[^\s.]* тут в самом конце тоже стало понятно.. Единственное жаль условие четко не говорит от том что может быть и точка поэтому конец можно было бы сделать таким
    ([^\s.])[^\s.]*\.* или как-то так ([^\s.])[^\s.]*(?:\s|\.)