|
|
|
| Здравствуйте.
дано:
$tmp_str = '<option value="167">aaa</option><option value="145">bbb</option>';
|
надо вытащить в массив ааа и bbb
делаю:
$out = preg_split("#(<.+>)#",$tmp_str,PREG_SPLIT_NO_EMPTY);
print_r($out);
|
получаю:
почему то оба значения запихиваются в одну ячейку $out[0]
подскажите, что не так делаю? | |
|
|
|
|
|
|
|
для: btr
(22.09.2013 в 16:27)
| | У вас регулярка вообще ничего не вырезает. Сделайте так:
print_r(htmlentities($out['0']))
|
У меня вышел такой результат:
<option value="167">aaa</option><option value="145">bbb</option>
|
| |
|
|
|
|
|
|
|
для: Zezst
(22.09.2013 в 18:19)
| | а смысл?
я хотел бы информацию без штмл получить.
почему не вырезает, в том то и вопрос. я долго вчитывался в описание функции, вроде должно.
я объясняю свою регулярку так: начинается с символа < содержит от одного и больше любых символов и заканчивается символом >
смысл функции понимаю так: разбивает строку на части пользуясь как разделителем тем, что подходит под рег. выр. и создает массив из этих частей.
где я ошибаюсь? | |
|
|
|
|
|
|
|
для: btr
(22.09.2013 в 18:31)
| | Просто, из вашего вопроса,можно понять что вы таки вырезаете то, что вам нужно, но в одну строку.
Вот так должна выглядеть ваша строка:
$out = preg_split("([<.+>])",$tmp_str,-1,PREG_SPLIT_NO_EMPTY);
|
и соответственно вывод:
Array
(
[0] => option value="167"
[1] => aaa
[2] => /option
[3] => option value="145"
[4] => bbb
[5] => /option
)
|
Осталось понять как выкинуть не нужное. | |
|
|
|
|
|
|
|
для: Zezst
(22.09.2013 в 18:55)
| | большое спасибо за ответ
судя по нему, в моем понимании есть дефект.
почему "в одну строку"?
не могли бы Вы подробнее объяснить что я не так делаю | |
|
|
|
|
|
|
|
для: btr
(22.09.2013 в 20:38)
| | Хы. Мне бы самому понять.
Собственно теперь, осталось разобраться с регуляркой. К сожалению, сам тоже не особо силен.
Мы убедились, что функция в полне рабочая. Теперь вам, лучше будет обратиться в раздел про регулярные выражения, наверняка есть способ стереть, то что внутри угловых скобок.
Большим помочь не смогу. | |
|
|
|
|
|
|
|
для: btr
(22.09.2013 в 16:27)
| | Разбивать на массив, значит удалять потом лишнее. А если так, есть в строке неизменное, по которому и нужно разбивать - </option>, и делать это лучше explode. Убрать лишнее, это значит удалить из элементов массива оставшийся html-код.
<?
$tmp_str = '<option value="167">aaa</option><option value="145">bbb</option>';
$tmp_str = explode("</option>", $tmp_str, -1);
$tmp_str = array_map('strip_tags', $tmp_str);
print_r($tmp_str);
|
А рег. выражением, так это найти между > и <, и запомнить. | |
|
|
|
|
|
|
|
для: confirm
(22.09.2013 в 21:32)
| | большое спасибо, как всегда просто и надежно :)
а вот с пониманием у меня туго, что я не так понимаю в сплите? :( | |
|
|
|
|
|
|
|
для: btr
(23.09.2013 в 08:06)
| | Вопрос другой - зачем для разбиения в данном случае preg_split? Во-первых читайте, что пишут разработчики:
Если вам не нужна мощь регулярных выражений, вы можете выбрать более быстрые (хоть и простые) альтернативы наподобие explode() или str_split().
Во-вторых вы ведь поучите тоже самое, что и при explode(), то есть далее все равно убирать лишнее, и в чем выгода?
Уж если PCRE использовать, тогда сразу искать искомое. Именно для такого примера достаточно шаблона />(\w+)</, и получим массив готовых данных. Но реально то не так будет или может быть, а поэтому шаблон будет посерьезнее. Хотите так, значит в раздел рег. выражений с этим вопросом, описывая все возможные условия своего списка. | |
|
|
|