За последние 24 часа нас посетили 19586 программистов и 1719 роботов. Сейчас ищут 1767 программистов ...

Пустая строка при модификаторе s. Как обозначить ??

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

  1. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    PHP:
    1. <?php
    2. ini_set('display_errors',1);
    3.  
    4. setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
    5.  
    6.  
    7. $n='Привет Женя
    8. Привет Вася
    9.  
    10. Привет Коля';
    11.  
    12. preg_match('/(.+?)\n\r\n(.+)/si',$n,$match);
    13.  
    14. echo $match[1];
    15. echo '<br>';
    16. echo $match[2]
    17.  
    18. ?>

    третья строка пустая. Был бы построчный режим написал ^$

    а при многострочном ??

    поймал пока ч с помощью \n\r\n

    также получается с помощью \n\r


    Естть ли логическое понимание , что представляет из себя элементы после Вася и перед привет Коля

    Как выглядит третья строка в символьном представлении.

    Вот еще вариант

    PHP:
    1. <?php
    2. ini_set('display_errors',1);
    3.  
    4. setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
    5.  
    6.  
    7. $n='Привет Женя
    8. Привет Вася
    9.  
    10. Привет Коля';
    11.  
    12. preg_match('/(.+)\r\n(.+)/si',$n,$match);
    13.  
    14. echo $match[1];
    15. echo '<br>';
    16. echo $match[2]
    17.  
    18. ?>
     
  2. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    наверно логически пустая строка это
    \n\r
     
  3. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Dima4321
    могу предположить несколько подходов, один из которых - использование file и работа с массивом строк.
    другой подход - поиск пустрой строки с помощью регулярки типа '/\n\s*?\n/si'
     
  4. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0

    Про массив строк понятно. Кстати в том случае empty не прокатит, если ты на это намекал.

    Я хотел четко понять для себя при работе не с массивом а все таки со строкой в строке , применительно к своему примеру.

    Я опробывал в нескольких регулярках чужих примеров и все работает.

    Оптимально брать \n\r---это эквивалент пустой строки.

    В переводе на русский.
    Начало строки и сразу возврат каретки.
     
  5. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Dima4321
    дело в том, что в винде, в линуксе и в мак ос перенос строки использует разные комбинации
     
  6. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    PHP:
    1. preg_match_all('/\S+/s', $string, $matches);
    Модификатор \S - любой символ кроме пробельного.
     
  7. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Jampire


    видишь ли во первых твой непробельный символ можно использовать только так

    [^\$]+ тогда уж проще [\s]+

    а во вторых такая запись совпадет не только с переносом строки но и с двумя тремя и тд. пробелами между словами, что уходит от решения задачи.
     
  8. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Dima4321
    Вы сперва перечитайте свой вопрос, а потом утверждайте подходит или нет. Вы какой вопрос задали? Какое представление имеет пустая строка? Вот ее представление '\s+'. Ваши вариации '\r\n' споткнуться на первом же серьезном проекте. Пустая строка может выглядеть и так '\n \n', и так '\r\n \r\n' и даже так '\n\t\t\t\n'. Для таких случаев и придуман псевдокласс \s и противоположный ему \S. Можно еще поиграться на тему \w и \W.
     
  9. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    я не занимаюсь серьезными пректами исключительно забавляю детей своим присутствием ))

    \s+ для меня единственный минус этого представления --это то что попадает строка с двумя пробелами между словами.
    а так было бы идеально пользоваться ею всегда.
     
  10. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Dima4321
    Вы сначала сформулируйте свой вопрос. Зачем вы вообще ищите пустые строки в многострочных данных. Если вам нужно избавиться от пустой строки, то это делается совсем не так.