Регулярное выражение для использования с PHP preg_match() для поиска новой строки

#php #newline #expression

#php #новая строка #выражение

Вопрос:

Я довольно новичок в регулярных выражениях. Я собираю блок текста из элемента textarea и хочу проверить, использовал ли человек, который его заполнил, какие-либо абзацы, среди прочего.

Я использую следующее, и я знаю, что это неправильно.

 preg_match('/rn|n|r/', $_GET['text']);
  

Ответ №1:

Ваше регулярное выражение не является неправильным. Но для обнаружения абзацев вам потребуется искать две последовательные новые строки:

  preg_match('/(r?n){2}/'
  

Возврат каретки r необязателен, и я бы просто проверил n перевод строки, поскольку большинство платформ рассматривают это как разрыв строки. Очевидно, что эта проверка завершится неудачей, если отправленный текст представляет собой всего лишь одну строку без абзацев или новых строк.

В качестве альтернативы вы также можете проверить наличие двух новых строк с любым видом пробелов между ними:

  preg_match('/(s*n){2}/'
  

Комментарии:

1. Спасибо за эти предложения, к сожалению, ни одно из них не сработало для меня. Итак, немного подробнее: я написал скрипт, который считывает блок текста и анализирует его на предмет основных особенностей написания. Файл csv определяет ряд правил, с каждым из которых связано регулярное выражение. Вот CSV-запись с одним из предложенных вами выражений. Абзац (ы), W, 3,a,p,»/(s*n){2}/», Начинайте новый абзац с каждым новым фокусом., Он загружается fgetcsv, а затем тестируется с помощью preg_match. Может ли этот процесс повлиять на это? Большое спасибо за ваше время, любая дальнейшая помощь действительно ценится.

2. Хотя в CSV это escape-последовательность, ее fgetcsv следует оставить n в покое. Но вам лучше распечатать регулярное выражение для целей отладки. (Регулярное выражение хорошо работает в моих тестах.)

3. Оно выводится как /(s * n){2}/ , точно так же, как и в csv. Я немного озадачен.

4. Распечатайте $_GET["text"] и сравните через view source, действительно ли оно содержит новые строки.

5. Ах-ха! Интересно. В нем нет новых строк. Даже если это происходит в текстовой области. Удаляет ли метод GET этот материал?

Ответ №2:

Предполагая:

Это абзац. Это абзац. Это абзац. Это абзац. Это абзац. Это абзац. Это абзац. Это абзац. Это абзац.

И это еще одно. И это еще одно. И это еще одно. И это еще одно. И это еще одно. И это еще одно. И это еще одно. И это еще одно. И это еще одно. И это еще одно.

Вы могли бы просто сделать:

 if (str_replace("rnrn", '', $str) != $str)
  // the input contains at least two paragraphs
  

Комментарии:

1. Спасибо за это. Я пытаюсь сохранить его с помощью preg_match, поскольку он обрабатывает серию правил из csv-файла в цикле, но я буду помнить о вашем решении и попробую его.

2. Я попробовал, но оно всегда возвращает положительный результат, даже если в текстовом поле нет абзацев: if (str_replace(» r n r n», «, $text) == $ text) echo ‘Обнаружены абзацы.’; Спасибо за вашу помощь, есть еще идеи?

3. @Ed Fearon Действительно. Я изменил условие.