За последние 24 часа нас посетили 22908 программистов и 1234 робота. Сейчас ищет 701 программист ...

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

Тема в разделе "Регулярные выражения", создана пользователем Artur_hopf, 14 май 2020.

  1. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. <?php
    2. $text = 'Тест А.Б. AA БВГ';
    3. $test = preg_split("/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/", $text);
    4.  
    5. print_r($test);
    6. //Array ( [0] => Тест А.Б. AA БВГ )
    7. ?>
    Код (Javascript):
    1. <script>
    2. var text = 'Тест А.Б. AA БВГ';
    3. var test = text.split(/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/);
    4.  
    5. console.log(test);
    6. //Array ( [0] => "", [1] => "Тест", [2] => "А", [3] => "Б", [4] => "AA БВГ", [5] => "" )
    7. </script>
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Объясните пожалуйста почему может не работать. Протестил на https://regex101.com/ там все пашет. сгенерировал там даже код для php. У меня не пашет, в чем дело? o_Oo_O:rolleyes::eek:
    PHP:
    1. $re = '/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/';
    2. $str = 'Тест А.Б. AA БВГ';
    3.  
    4. preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
    5.  
    6. // Print the entire match result
    7. var_dump($matches);
    решено, нужен был модификатор /u , из за русских символов
    PHP:
    1. $re = '/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/u';
     
    #2 Artur_hopf, 14 май 2020
    Последнее редактирование: 14 май 2020