Помогите, пожалуйста, разбить строку PHP

R
На сайте с 03.08.2012
Offline
131
613

Здравствуйте! Есть строки:

asdf kjasdf j32f 23if #248234 [sadfasdfasdf]

asdf #423423 [asdf]

a #1
Нужно получить первую чать до знака #, потом #(все цифры после знака), ну и то что в скобках []
Т.е. должно получиться так (допустим если разбить в массив, но можно и по переменным:

$one[0] = asdf kjasdf j32f 23if

$one[1] = #248234
$one[2] = [sadfasdfasdf]

$to[0] = asdf
$to[1] = #423423
$to[2] = [asdf]

....

Я думаю вы поняли, что мне нужно, читал по этому поводу информацию в нете. Регулярки получаются пока что очень плохо, вот этот пример мне поможет многое понять и сделать. Буду очень благодарен за помощь!

bay_ebook
На сайте с 28.05.2010
Offline
111
#1
revered:
Здравствуйте! Есть строки:
asdf kjasdf j32f 23if #248234 [sadfasdfasdf]
asdf #423423 [asdf]
a #1

ну раз регулярка вам не по силам, нужно идти другим методом :)

Программирование - это такая вещь, что любую задачу можно сделать 10 способами (но за 8 из них получить по голове от вышестоящего прогера)


$str = 'asdf #423423 [asdf]';
$str = explode('#', $str);
$str[1] = explode(' ', $str[1]);
$str[2] = $str[1][1];
$str[1] = '#'.$str[1][0];

Только это костыль, регулярка надежнее, но надеюсь на мысль натолкнул.

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
AlexVenga
На сайте с 10.04.2007
Offline
190
#2

Регулярка примерно такая:


/(.+)#([0-9]+)[(.+)]/ui

НАсчет спецсимволов так на вскидку не помню

но на всяк можно так (заэкранируем)


/(.+)\#([0-9]+)\[(.+)\]/ui



---------- Добавлено 22.01.2014 в 22:54 ----------

Если прямо код то такой:


foreach ($one AS $key=>$value)
{
preg_match_all('/(.+)\#([0-9]+)\[(.+)\]/ui',$value,$to);
print_r($to);
}
Антикризисное предложение: [Бурж, AdSense] [NEW] Сайты - каталоги компаний с гарантией трафа [Дорого] (/ru/forum/1006462)
R
На сайте с 03.08.2012
Offline
131
#3

Вот что выдает(

Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) )
siv1987
На сайте с 02.04.2009
Offline
427
#4

preg_match_all('/(.+?)\s*#(\d+)\s*\[(.+?)\]/i', $value, $out);

print_r($out);

если у вас список строк предварительно разбиваем на массив строк, потом обходим каждую строчку. Либо юзаем флаг m (хотя похоже можно и без). В любом случае обходом массивом и preg_match-ем будет легче разобраться с результатом нежели с preg_match_all

R
На сайте с 03.08.2012
Offline
131
#5

Спасибо, очень помогли! Скажите, а что в регулярке значит знак вопроса? Чтоб я уже точно все понимал) В нете глянул, ну там что-то не понятным языком написано.

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#6
revered:
Спасибо, очень помогли! Скажите, а что в регулярке значит знак вопроса? Чтоб я уже точно все понимал) В нете глянул, ну там что-то не понятным языком написано.

Он значит "до". Как пример, до символа.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
R
На сайте с 03.08.2012
Offline
131
#7

Спасибо большое!

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