Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поможет ли здесь регулярка?
 
 автор: Nytrogen   (18.10.2008 в 19:00)   письмо автору
 
 

Предположим, у нас имеется строка theString:
Name, Surname; Age, City; Date, Notes


Также мы знаем перечень разделителей - строка delims:
,;,;,


Требуется вытащить из строки theString значение поля по его номеру:
если 1 - то Name,
если 2 - то Surname,
если 3 - то Age и т.д.

Вопрос: возможно ли это организовать, используя регулярное выражение?

P.S. Строки theString и delims могут быть произвольными, но они всегда соответствуют друг другу.

  Ответить  
 
 автор: sl1p   (18.10.2008 в 20:14)   письмо автору
 
   для: Nytrogen   (18.10.2008 в 19:00)
 

а с explode пробовали как-то?..

  Ответить  
 
 автор: Nytrogen   (18.10.2008 в 20:45)   письмо автору
 
   для: sl1p   (18.10.2008 в 20:14)
 

В том-то и проблема, что разделители разные =(

  Ответить  
 
 автор: AcidTrash   (18.10.2008 в 21:01)   письмо автору
 
   для: Nytrogen   (18.10.2008 в 19:00)
 

Возможно так подойдет
<pre>
<?php
$text 
"Name, Surname; Age, City; Date, Notes";
preg_match_all("#([^,;]+)#s"$text$out);
unset(
$out[0]);
print_r($out);
?>

  Ответить  
 
 автор: Nytrogen   (18.10.2008 в 22:47)   письмо автору
 
   для: AcidTrash   (18.10.2008 в 21:01)
 

К сожалению, и так не пойдёт, так как строка delims меняется.
Интересно, что такая, на первый взгляд, элементарная задача не имеет столь простого решения. "Насадить строку на штыри" - так бы я назвал реализацию.
Я вообще это на VB делаю, написал вот для этого такой цикл:

Проходим по строке, считывая разделители, пока не дойдём до заданной позиции, где хранится искомое значение. Далее, если разделители справа ещё есть, то вытаскиваем значение от позиции до следующего разделителя. Если разделителей больше нет, то вытаскиваем значение от позиции до конца строки.

Имхо, для такой задачи весьма наворочено. Может-таки можно реализовать проще?

  Ответить  
 
 автор: Nytrogen   (18.10.2008 в 23:30)   письмо автору
 
   для: AcidTrash   (18.10.2008 в 21:01)
 

Всё, нашёл решение! Не знаю как в PHP, но в Visual Basic можно прочитать массив SubMatches, в которой помещаются все искомые значения, после просеивания через
(.*)\;(.*)\,(.*)\;(.*) ... 

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования