php5 пропарсить строку
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- мл. сержант
- Сообщения: 142
- Зарегистрирован: 2008-03-13 22:16:57
php5 пропарсить строку
Есть строка (почтовый адрес), которую нужно напечатать на конверте; если строка больше $strLen, то нужно ее разбить на подстроки которые сохраняются в массиве, причем разбивать нужно "по-словам". Можно ли perl-совместимым регулярным выражением из строки длиной $strLen "отрезать" с конца все до первого пробела?
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: php5 пропарсить строку
а че за email адресс, до первого пробела?Demiurg писал(а): "отрезать" с конца все до первого пробела?
в приницпе можно определить какой номер символа в строке в первом пробеле (с права навреное?), потом substr отрезать до того сивола....
-
- мл. сержант
- Сообщения: 142
- Зарегистрирован: 2008-03-13 22:16:57
Re: php5 пропарсить строку
не E- , обычный почтовый адрес, хранящийся в БД, который нужно распечатать на обычном (за 50 коп.) конверте...а че за email адресс

...такой алгоритм я уже "сочинил", но получился довольно громоздкий, с "кучей" циклов... ИМХО, можно сделать проще с помощью mb_ereg_* в одну строчку... голову уже часа 1.5 ломаю, пока не получается...в приницпе можно определить какой номер символа

- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: php5 пропарсить строку
пробел справа или слева?
-
- мл. сержант
- Сообщения: 142
- Зарегистрирован: 2008-03-13 22:16:57
Re: php5 пропарсить строку
справа (с конца) подстроки...
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: php5 пропарсить строку
я бы сделал так, проще всего, еще можно групировку
Код: Выделить всё
@array = splite (/ /, $strLen);
unshift @array; # удалить слова до первого пробела, с конца массива, на php есть unshift по-моиму
$strLen2 = join (/ /, @array);
-
- мл. сержант
- Сообщения: 142
- Зарегистрирован: 2008-03-13 22:16:57
Re: php5 пропарсить строку
в perl я не особо силен, но мысль понял. В php я пока это вижу так:
...пошел тестить.
уже "кучу" баг нашел, поправил.
Код: Выделить всё
/**
Метод 'Разбить строку по словам на подстроки не больше заданной длины'
@param $str исходная строка
*/
public function mb_str2arr($str){
$j = 0;
if(mb_strlen($str) > $this->strLen)
while(mb_strlen($str) >= $this->strLen){
$tempStr = mb_substr($str,0,50);
$tempArrStr = mb_split(" ",$tempStr);
array_pop($tempArrStr);
$tempStr = implode(" ",$tempArrStr);
$retArr[$j] = $tempStr;
$str = mb_substr($str,mb_strlen($tempStr));
$j++;
}
$retArr[$j] = $str; // записываем оставшуюся подстроку < $this->strLen
return $retArr;
}

-
- мл. сержант
- Сообщения: 142
- Зарегистрирован: 2008-03-13 22:16:57
Re: php5 пропарсить строку
Что-то я упустил:
если инициализировать String со значением 50, то печатет:
если со значением 100, то:
ни то, ни другое не верно... в первом случае строка слишком короткая, во втором длиньше пятидесяти на 5 символов... ЧЯДНТ?
Код: Выделить всё
%cat index.php
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Content-type: text/html; charset=UTF-8");
function __autoload($class_name){
require_once 'inc/'.$class_name.'.php';
}
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Account of correspondence</title>
</head>
<body>';
$where = "г. Москва, Биржевая площадь, д.1, Федеральная служба по труду и занятости, Руководителю.";
$str = new String();
$arrStr = $str->mb_str2arr($where);
for($i = 0; $i < count($arrStr); $i++)
echo "<p>$i - ",$arrStr[$i],"</p>";
echo '</body></html>';
?>
Код: Выделить всё
%cat inc/String.php
<?php class String {
protected $strLen;
public function __construct($strLen = 50){
$this->setStrLen($strLen);
}
public function __destruct(){
}
/**
Метод 'Разбить строку по словам на подстроки не больше заданной длины'
@param $str исходная строка
*/
public function mb_str2arr($str){
$j = 0;
if(mb_strlen($str) > $this->strLen)
while(mb_strlen($str) > $this->strLen){
$tempStr = mb_substr($str,0,$this->strLen);
$tempArrStr = mb_split(" ",$tempStr);
array_pop($tempArrStr);
$tempStr = implode(" ",$tempArrStr);
$retArr[$j] = $tempStr;
$str = mb_substr($str,mb_strlen($tempStr));
$j++;
}
$retArr[$j] = $str; // записываем оставшуюся подстроку < $this->strLen
return $retArr;
}
public function setStrLen($strLen){
$this->strLen = $strLen;
}
} ?>
Код: Выделить всё
0 - г. Москва, Биржевая
1 - площадь, д.1, Федеральная
2 - служба по труду и
3 - занятости, Руководителю.
Код: Выделить всё
0 - г. Москва, Биржевая площадь, д.1, Федеральная служба по
1 - труду и занятости, Руководителю.
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: php5 пропарсить строку
Demiurg, ты в какой кодировке работаешь?
-
- мл. сержант
- Сообщения: 142
- Зарегистрирован: 2008-03-13 22:16:57
Re: php5 пропарсить строку
UTF8... уже разобрался:ты в какой кодировке работаешь?
Код: Выделить всё
public function mb_str2arr($str){
$j = 0;
if(mb_strlen($str,"UTF-8") > $this->strLen)
while(mb_strlen($str,"UTF-8") > $this->strLen){
$tempStr = mb_substr($str,0,$this->strLen,"UTF-8");
$tempArrStr = mb_split(" ",$tempStr);
array_pop($tempArrStr);
$tempStr = implode(" ",$tempArrStr);
$retArr[$j] = $tempStr;
$str = mb_substr($str,mb_strlen($tempStr));
$j++;
}
$retArr[$j] = $str; // записываем оставшуюся подстроку < $this->strLen
return $retArr;
}
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: php5 пропарсить строку
можноDemiurg писал(а):а что-нибудь короче/красивее этого придумать можно?