[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения
kamcha
Здравствуйте!

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

Бла-бла-бла (типа шапка документа)
потом идет закодированные данные
ш1 123 125 11256
ш5 12233 2223
ш55 12223

ш1 12456
ш5 12354
ш5 454654
ш62 12315

ш1 5665 2323 5656
ш5 45646

конец, подпись

Мне необходимо поблочно выбрать текст, интересует только закодированные данные.

Необходимо все, что от Ш1 до Ш1. Вот так

строка1:= ш1 123 125 11256
ш5 12233 2223
ш55 12223;

строка2:=ш1 12456
ш5 12354
ш5 454654
ш62 12315

строка3:= ш1 12456
ш5 12354
ш5 454654
ш62 12315

Вопрос: Как правильно записать регулярку, для того чтобы захват происходил от Ш1 до не равно Ш1. То есть курсор идет, когда натыкается на Ш, то проверяет Ш1 это или не Ш1, если Ш1 останавливается, а если Ш, но не Ш1 (допустим Ш5), то считывание идет дальше. А когда последний блок Ш считывает, останавливается, как только натыкается на НЕ Ш или не цифра.

Не знаю, все ли понятно изложил, но голова кипит уже третий день. Не знаю как выдрать из текста эти блоки...

Как указать "НЕ", т.е. '^' действующий не на один символ, а именно на комбинацию символов. НЕ Ш1, например.
Может кто на свежую голову увидит, как это организовать. Буду признателен.



Спустя 5 часов, 11 минут, 50 секунд (26.07.2011 - 11:28) Winston написал(а):
Цитата (kamcha @ 26.07.2011 - 06:16)
Не знаю, все ли понятно изложил

Не понятно, по проще объясни.

Тебе нужно захватить все шифры которые не начинаются с ш1 ?

Спустя 13 часов, 7 минут, 10 секунд (27.07.2011 - 00:35) kamcha написал(а):
Как указать "НЕ", т.е. '^' действующий не на один символ, а именно на комбинацию символов. НЕ Ш1, например.



Цитата (PHPprogrammer @ 26.07.2011 - 08:28)
Не понятно, по проще объясни.

Тебе нужно захватить все шифры которые не начинаются с ш1 ?



Мне нужно захватить все шифры, начинающиеся с Ш1, но так как четкого признака конца шифра нет, то надо сделать признаком конца признак начала шифра - Ш1. То есть курсор идет сначала с Ш1 натыкается на Ш, и если после Ш стоит 1 то он это считается конец выборки.

Ш\d*\s+\S+[^Ш]* эта регулярка выбирает поблочно, а мне надо чтобы все блоки между двумя Ш1 были выбраны сразу, одним рег.выражением. Вот если бы сработало типа такого Ш\d*\s+\S+[^Ш1]* но так не работает.

Спустя 7 часов, 35 минут, 50 секунд (27.07.2011 - 08:11) Mirexzpalich написал(а):

preg_macth_all("/ш1[^(ш1)]*/i",$zakodir_file,$result_array);
print_r($$result_array);

Спустя 8 часов, 41 минута, 47 секунд (27.07.2011 - 16:53) Winston написал(а):
Mirexzpalich
Так не пойдет :)

А если, что-то такое ?
Свернутый текст
$str = 'ш1 123 125 11256
ш5 12233 2223
ш55 12223

ш1 12456
ш5 12354
ш5 454654
ш62 12315

ш1 5665 2323 5656
ш5 45646'
;

preg_match_all("#[^(ш)]*#is", $str, $match);
$match = array_diff($match[0], array(''));
echo '<pre>';
print_r($match);
echo '</pre>';
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.