|
|
|
| Здравствуйте! нужно разбить текст в массив по разделителю: (абзац СЛОВО с буквами в верхнем регистре абзац) При это начало текста без разделителя:
$text="Такой текст. что то написано.
ТЕМА
это идет тема.
СРОКИ
идут условия по срокам.
и т.п."
|
в итоге должно быть:
1 Такой текст. что то написано.
2 ТЕМА
это идет тема.
3 СРОКИ
идут условия по срокам.
не могу никак написать регулярку:
$arr=(preg_split('#.*?([\r\n])+[A-ZА-ЯЁ\/][\r\n].*?#',$text));
echo "<pre>";
print_r($arr);
echo "</pre>";
|
| |
|
|
|
|
|
|
|
для: vadimka
(14.10.2010 в 13:04)
| | Просто нужно добавить отсутствующий заголовок. | |
|
|
|
|
|
|
|
для: Trianon
(14.10.2010 в 13:18)
| | не знаю как прицепить "или" прошу как то намекнуть:) | |
|
|
|
|
|
|
|
для: vadimka
(14.10.2010 в 13:04)
| | >ТЕМА
это идет тема.
СРОКИ
идут условия по срокам.
похоже на preg_split('#^([A-ZА-ЯЁ][u]+[/u])$#m', ....., PREG_SPLIT_DELIM_CAPTURE
или preg_split('#^(?=[A-ZА-ЯЁ]+$)#m', ..........
но под словами
>Просто нужно добавить отсутствующий заголовок.
,если правильно понял, имелось ввиду то что таким разделением ограничивается возможность присутствия в тексте просто строк из заглавных букв | |
|
|
|
|
|
|
|
для: heed
(14.10.2010 в 16:24)
| | >но под словами
>>Просто нужно добавить отсутствующий заголовок.
>,если правильно понял, имелось ввиду то что таким разделением ограничивается возможность присутствия в тексте просто строк из заглавных букв
нет - это ограничение предполагалось автором изначально.
имелся в виду легкий способ вернуть данным некий минимально регулярный вид.
Так чтоб первый фрагмент произвольного текста синтаксически не отличался от остальных.
Конечно, способ несколько костыльный... Так ведь и исходная постановка задачи красотой не блещет, очень мягко выражаясь. | |
|
|
|
|
 35.5 Кб |
|
|
для: Trianon
(14.10.2010 в 16:29)
| | если признаться , не осилил точно представить такой способ :)
, но напомнило один из моих недавних не менее костыльных способов разделения текста :) делал мультиязычные страницы ошибок apache
задумка была в том что предварительно скриптом в файлы записывается первая строка
en<196-86>ru<310-88>cs<428-92>de<553-120>es<709-94> ....
с указанием оффсетов и размеров в файле и по ErrorDocument 400 error.php?400 .... считывать только нужное.
но там ещё более строгая форма записи (для индексирующего скрипта) и слишком много if в обработчике. | |
|
|
|
|
|
|
|
для: heed
(14.10.2010 в 16:24)
| | Не могли бы объяснить | |
|
|
|
|
|
|
|
для: vadimka
(14.10.2010 в 16:42)
| | из php-мануала/reference.pcre.pattern.syntax.html
Сопоставление подмаски, содержащий утверждение, происходит обычным образом, за исключением того, что текущая позиция не изменяется. Утверждения касательно последующего текста начинаются с (?= для положительных утверждений и с (?! для отрицающих утверждений. Например, \w+(?=;) совпадает со словом, за которым следует символ ';', но при этом сама точка с запятой в совпадение не включается. А foo(?!bar) соответствует любому появлению "foo", после которого не идёт "bar". | |
|
|
|
|
|
|
|
для: heed
(14.10.2010 в 17:13)
| | спасибо! | |
|
|
|
|
|
|
|
для: vadimka
(14.10.2010 в 17:23)
| | Я решил всех и себя запутать - упрошаем задачу:
$text="
НАЧАЛО
и какой-то текст.
ТЕМА
это идет тема.
СРОКИ ЗАКАЗА
идут условия по срокам.
НАЗВАНИЕ/СО/СЛЕШЕМ
снова текст.
"
$arr=(preg_split('#(^|[\r\n]+)[А-ЯЁ\s\/]+[\r\n]+.*?#',$text,-1, PREG_SPLIT_NO_EMPTY ));
мне так разбивает но при этом "съедает" слова с буквами в верхнем регистре.
PREG_SPLIT_DELIM_CAPTURE - чето не меняет ситуацию | |
|
|
|
|
|
|
|
для: vadimka
(14.10.2010 в 17:31)
| | а зачем Вам preg_split?
чем preg_match_all не угодил? | |
|
|
|
|
|
|
|
для: Trianon
(14.10.2010 в 17:48)
| | Да, наверно, нужен preg_match_all, это я зарапортовался, заодно, что-то новое узнал:) | |
|
|
|
|
|
|
|
для: vadimka
(14.10.2010 в 17:31)
| | кстати да :) PREG_SPLIT_NO_EMPTY может всё испортить
PREG_SPLIT_DELIM_CAPTURE имеет смысл только если в () что-то есть
<?php
header('content-type: text/plain');
$text="НАЧАЛО
и какой-то текст.
ТЕМА
это идет тема.
СРОКИ ЗАКАЗА
идут условия по срокам.
НАЗВАНИЕ/СО/СЛЕШЕМ
снова текст.
";
#\A - начало данных (независимо от многострочного режима)
#/m - метасимвол начала строки '^' соответствует ..... '$' ..... перед переводом строки
var_dump(preg_split('#(?:\A|^\r?\n)[А-ЯЁ\/]+\r?\n#m', $text,-1, 1));
?>
--------------------------------------
<?php
var_dump(preg_split('#(?:\A|^\r?\n)([А-ЯЁ\/]+)\r?\n#m', $text, -1, 1+PREG_SPLIT_DELIM_CAPTURE));
// пробел не добавлял
?>
|
читайте softtime.ru/bookphp/help.php
// после копирования со страниц удаляйте добавленные форумом пробелы после строк в [CODE]
//// или браузер добавляет
////// \r?\n$ была опечатка после переделывания \r?$ на \r?\n | |
|
|
|
|
|
|
|
для: heed
(14.10.2010 в 18:09)
| | работает, но надо время, чтобы понять как. | |
|
|
|