RegExp для захвата «заголовка» вызвать слова в текстовой области

Я пытаюсь написать регулярное выражение для php preg_split, чтобы захватить определенные «заголовки», как слова в текстовой области обработки im.

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

$returnValue = preg_split('/[^|\n]*[\t| ]*\b(Pro|Contra|Conclusion)\b\:[\t| ]*/i',
$data['review_text'],
-1,
PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);

Это мой пример ввода текста

Intro line one, first part of the array
Pro:Pro:double Pro 1, no space between
Pro: Pro:double Pro 2, space between
Pro: test Pro:double Pro 3, characters between
Pro:
Pro:double Pro 4, linebreak betweem, should create an empty pro entry
Contra:
Conclusion: the last Contra was empty
Conclusion: this Contra: in this row should not match!
Conclusion: Test with spaces between Conclusion and :
Conclusion: this Conclusion was prefixed by a space
Conclusion: this Conclusion was prefixed by a Tab
Conclusion: this Conclusion was prefixed by two Tabs a space between
Conclusion : this Conclusion has a space between Conclusion and :a final line with multiple line breaks in between, should be part of the last conclusion fragment

Результат должен состоять из [0] в качестве вводной строки, 4 результатов Pro (с их разделителями), 1 Contra (пусто) и 7 результатов Заключения (с их разделителями). Единственный Contra должен быть пустым, а последняя строка должна быть частью последнего Заключения

Я пытаюсь подобрать что-то подобное

  1. Начало строки, начало файла
  2. Ноль или n вхождений любого пробела
  3. Любая версия Pro, Contra или Заключение (без учета верхнего / нижнего регистра)
  4. Ноль или n вхождений любого пробела
  5. :

В этом порядке

0

Решение

Прежде всего, [^|\n]* означает 0 или более символов, которые не являются конвейером | или разрыв строки.
[\t| ]* означает 0 или более символов, которые не являются табуляцией или каналом | или пространство.

Я думаю, вы хотите:

/\s*\b(Pro|Contra|Conclusion):[\t ]*/i
1

Другие решения

С помощью @ M42 я смог найти правильный путь …

'/\n[\t ]*\b(Pro|Contra|Conclusion)[\t ]*:[\t ]*/i'

Отсутствует только «Начало файла вместо новой строки», это делает почти то, что я хотел (все еще тестирую, чтобы убедиться). Прямо сейчас я добавляю «\ r \ n» перед строкой, которая удаляется позже, когда я обрезаю () фрагменты строки.

Полный вызов PHP выглядит следующим образом

$returnValue = preg_split('/\n[\t ]*\b(Pro|Contra|Conclusion)[\t ]*:[\t ]*/i', $data['review_text'], -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);

На всякий случай, если вам интересно, почему я использовал Fazit вместо Заключения в ответе на M42, я пишу код для немецкого веб-приложения, поэтому мне приходится переводить каждую копию&вставьте в StackOverflow. (ಠ_ಠ)

0

По вопросам рекламы [email protected]