За последние 24 часа нас посетили 51749 программистов и 1768 роботов. Сейчас ищут 807 программистов ...

Подскажите почему не работает регулярка в preg_split?

Тема в разделе "PHP для новичков", создана пользователем Artur_hopf, 31 окт 2018.

  1. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Добрый день. Есть регулярное выражение:
    Код (Text):
    1.  
    2. /^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/
    Оно предназначено для дробления фамилии и инициалов по массиву, например:
    PHP:
    1. $test = 'Петров С.В.';
    2. $array = preg_split('/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/', $test);
    По логике должно получится:

    Array
    (
    [0] => 'Петров'
    [1] => 'С'
    [2] => 'В'
    )

    Но почему то не работает. На этом сайте все работает как надо https://regexr.com/

    И в javascript тоже все работает:
    Код (Javascript):
    1. var test = 'Петров С.В.';
    2. var array = test.split(/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/);
    3. alert(array);
    Что я делаю не так в php?
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Artur_hopf, потому что preg_split именно разбивает по шаблону, а не находит части, соответствующие шаблону.
    То есть, если шаблон будет \s+, то получите Петров и С.В.
     
  3. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @Sail Спасибо большое :)