|
|
|
| Предположим, у нас имеется строка theString:
Name, Surname; Age, City; Date, Notes
|
Также мы знаем перечень разделителей - строка delims:
Требуется вытащить из строки theString значение поля по его номеру:
если 1 - то Name,
если 2 - то Surname,
если 3 - то Age и т.д.
Вопрос: возможно ли это организовать, используя регулярное выражение?
P.S. Строки theString и delims могут быть произвольными, но они всегда соответствуют друг другу. | |
|
|
|
|
|
|
|
для: Nytrogen
(18.10.2008 в 19:00)
| | а с explode пробовали как-то?.. | |
|
|
|
|
|
|
|
для: sl1p
(18.10.2008 в 20:14)
| | В том-то и проблема, что разделители разные =( | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(18.10.2008 в 21:01)
| | К сожалению, и так не пойдёт, так как строка delims меняется.
Интересно, что такая, на первый взгляд, элементарная задача не имеет столь простого решения. "Насадить строку на штыри" - так бы я назвал реализацию.
Я вообще это на VB делаю, написал вот для этого такой цикл:
Проходим по строке, считывая разделители, пока не дойдём до заданной позиции, где хранится искомое значение. Далее, если разделители справа ещё есть, то вытаскиваем значение от позиции до следующего разделителя. Если разделителей больше нет, то вытаскиваем значение от позиции до конца строки.
Имхо, для такой задачи весьма наворочено. Может-таки можно реализовать проще? | |
|
|
|
|
|
|
|
для: AcidTrash
(18.10.2008 в 21:01)
| | Всё, нашёл решение! Не знаю как в PHP, но в Visual Basic можно прочитать массив SubMatches, в которой помещаются все искомые значения, после просеивания через
(.*)\;(.*)\,(.*)\;(.*) ...
|
| |
|
|
|