Вопрос по php, regex – Регулярное выражение, совпадающее с несколькими строками несколько раз

0

У меня есть такая строка:

<code>Name: John Doe

Age: 23

Primary Language: English

Description: This is a multiline
description field that I want 
to capture

Country: Canada
</code>

Это не фактические данные, но вы можете видеть, что я пытаюсь сделать. Я хочу использовать регулярное выражение для получения массива & quot; ключа & quot; поля (Имя, Возраст, Основной язык, Описание, Страна) и их значения.

Я использую PHP.

Моя текущая попытка такова, но она не работает:

<code>preg_match( '/^(.*?\:) (.*?)(\n.*?\:)/ism', $text, $matches );
</code>
Я предполагаю, что данные заполняются пользователем. Данные поступают с$_POST или из базы данных? Biotox
Существует \ n, но ваши модификаторы говорят, что каждая новая строка - это новая строка. А то. также соответствует \ n kuh-chan

Ваш Ответ

2   ответа
1

Вот одно из решений:http: //rubular.com/r/uDgXcIvha.

    \s*([^:]+?)\s*:\s*(.*(?:\s*(?!.*:).*)*)\s*

Обратите внимание, что я использовал отрицательное прогнозное утверждение,(?!.*:). Это единственный способ проверить, что следующая строка Не выглядеть как новое поле, и в то же время продолжить, где вы остановились. (Вот почему взгляды и взгляды известны как Нулевой ширины утверждения.)

EDIT: убран бит о предпросмотрах произвольной ширины; Я ошибался. Вышеуказанное решение в порядке.

0

:" в качестве разделителя / токена и обрезать начальные и конечные пробелы для удаления нежелательных новых строк.

http: //php.net/manual/en/function.strtok.ph

Похожие вопросы