Помогите, пожалуйста, составить регулярное выражение. Не нашел описание в теории Примера подобного тоже не попалось. В общем есть текст, такого вида:
Бла-бла-бла (типа шапка документа)
потом идет закодированные данные
ш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>';