В строке 8 пробелов, не удается их идентифицировать, прошу помочь

P
На сайте с 06.01.2009
Offline
592
551

Здравствуйте.

Есть некий набор строк. Нужно поочередно проверить строки файла и выбрать те, в которых в начале строки 8 пробелов.

Т.е. нужная строка выглядит так


; некий текст;снова текст

есть

$stroka = ";        некий текст;снова текст";

$vbzx= explode(";", $stroka);
$proverochka1 = substr($vbzx[1], 0, 8);
if ($proverochka1==' ') {$tochtonado=$vbzx[1];}
edogs software
На сайте с 15.12.2005
Offline
775
#1

При проверке в таком случае лучше использовать ===, а не ==.

Не очень понятно что такое "не удалось идентифицировать пробелы".

Они или пробелы или не пробелы.

То что Вам кажется пробелами - может быть символами табуляции или какими-нибудь экзотическими utf8 символами, но тогда это уже не пробелы и Вам надо переформулировать задачу.

Если же речь о том, что бы проверить все строки (а не только первую), то ясен перец надо в цикле пройтись по vbzx, например как

foreach($vbzx as $k=>$v) .... $tochtonado=$vbzx[$k];

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
L
На сайте с 07.12.2007
Offline
351
#2

Выбрать первую подстроку между ;...; только если вся строка начинается с ';' + 8 пробелов:

(preg_match('|^;(\s{8,8}[^;]+)|', $stroka, $matches) >0) { $tochtonado = $matches[0];}

в $matches[0] будет строка между ;...;

или выбрать все подстроки, которые начинаются с ';' + 8 пробелов:

if (preg_match_all('|(;\s{8,8}[^;]+)|', $stroka, $matches) >0) {
for ($i=0; $i<count($matches[1]); $i++) {
$tochtonado = $matches[1][$i]; // $matches[1][$i] - совпавшая строка
}
}

в $matches[1] будет массив таких строк, его нужно обрабатывать в цикле.

PS: Посмотреть что выгребается в массив: print_r($matches[1]) или print_r($matches[0]) соответственно.

PPS: \s соответствует пробелу и всем непечатным символам (перевод строк и тп) . Вместо него можно явно поставить ПРОБЕЛ.

[Удален]
#3

Ladycharm, в регулярке указывать количество можно одним числом т.е \s{8}, двумя когда интервал не нулевой.

siv1987
На сайте с 02.04.2009
Offline
427
#4

Ladycharm, использовать в качестве разделителя шаблона регулярного выражения спецсимвол "|" не комильфо. :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий