[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: поиск в строке
quickxyan
нужно организовать поиск в строке. например есть у меня строка $data и там есть 2 номера телефона - вот мне и надо найти этих 2 номера. вот все что я сделал, но прикол в том, что скрипт зацикливаеться и я немогу понять в чем дело.


<?php
$data='sdfs80633249087ddfs80443345343fff';
$pos = strpos($data, "80");

while($pos){
$string = substr($data, $pos, 11);
$a[]=$string;
$data = str_replace($string,'',$data);
echo $string.'<br>';
}
?>




Спустя 7 минут, 18 секунд (24.12.2010 - 22:40) quickxyan написал(а):
все спасибо всем, сам разобрался))) просто надо строку
 $pos = strpos($data, "80"); 

вставить в цикл)

Спустя 2 минуты, 23 секунды (24.12.2010 - 22:42) Dron19 написал(а):

$data='sdfs80633249087ddfs80443345343fff';
$preg = preg_replace("/(.*?)([0-9]?)/i","\\2",$data);
echo "<br>".$preg;

Лови, но этот скрипт выведет 80633249087 и 80443345343 одной строкой, то бишь слитно

Спустя 4 минуты, 10 секунд (24.12.2010 - 22:46) quickxyan написал(а):

<?php
$data='sdfs80633249087ddfs80443345343fff';

while(strpos($data, "80")){

$string = substr($data, strpos($data, "80"), 11);
$a[]=$string;
$data = str_replace($string,'',$data);
echo $string.'<br>';
}

?>


вот конечная версия если кому интересно

Спустя 2 минуты, 34 секунды (24.12.2010 - 22:49) quickxyan написал(а):
Dron19, тоесть ты предлагаешь делать через регулярные выражения. а как чтобы оно закидывало в массив и раздельно.
можна впринципе просто потом эту строку по частям разбирать и закидывать в масссив или есть другие предложения?

Спустя 2 минуты, 54 секунды (24.12.2010 - 22:52) Dron19 написал(а):

$data='sdfs80633249087ddfs80443345343fff';
$preg = preg_replace("/(.*?)([0-9]+)(.*?)([0-9]+)(.*)/i","\\2 \\4",$data);
echo "<br>".$preg;

А вот так выведет // 80633249087 80443345343

Спустя 1 минута, 10 секунд (24.12.2010 - 22:53) Dron19 написал(а):
ну по моему регуляркой легче

Спустя 2 минуты, 8 секунд (24.12.2010 - 22:55) hellmin написал(а):
$data='sdfs80633249087ddfs80443345343fff';
preg_match("/(80[0-9]{9})/i",$data, $matches);
print_r($matches);

Спустя 1 минута, 43 секунды (24.12.2010 - 22:57) quickxyan написал(а):
вобщем ясно. спасибо за помощь, но я все таки наверное буду пользоваться своим способом - просто как-то недоразобрался в регулярках и хочу использовать, то что я понимаю)

Спустя 2 минуты, 6 секунд (24.12.2010 - 22:59) quickxyan написал(а):
хотя впринципе и регуляркой тож ниче) далеее увидим. всем спасибо, что откликнулись!

Спустя 1 минута, 47 секунд (24.12.2010 - 23:01) hellmin написал(а):
А что тут разбираться?
preg_match("/(80[0-9]{9})/i",$data, $matches);

80 - число с которого начинается номер
[0-9] - любая цифра, так же можно использовать \d и получится немного короче preg_match("/(80\d{9})/i",$data, $matches);
{9} - 9 повторений
[0-9]{9} - 9 повторений любой цифры
Небольшой код, зато выдает то что и хочется
Array ( [0] => 80633249087 [1] => 80633249087 ) 

Спустя 5 минут, 27 секунд (24.12.2010 - 23:06) Dron19 написал(а):
Цитата (hellmin @ 24.12.2010 - 20:01)
А что тут разбираться?
preg_match("/(80[0-9]{9})/i",$data, $matches);

80 - число с которого начинается номер
[0-9] - любая цифра, так же можно использовать \d и получится немного короче preg_match("/(80\d{9})/i",$data, $matches);
{9} - 9 повторений
[0-9]{9} - 9 повторений любой цифры
Небольшой код, зато выдает то что и хочется
Array ( [0] => 80633249087 [1] => 80633249087 ) 

У тебя в 0 элементе и в 1ом одно и тоже, а нужно вытащить разные значения

Спустя 37 секунд (24.12.2010 - 23:07) Dron19 написал(а):
quickxyanБ мой способ рабочий? Да! Где плюсик ? =) wink.gif

Спустя 6 минут, 34 секунды (24.12.2010 - 23:13) hellmin написал(а):
Рано плюсик!
$data='sdfs80633249087ddfs80443345343fff';
preg_match_all("/(80[0-9]{9})/i",$data, $matches);
print_r($matches);

Спустя 14 секунд (24.12.2010 - 23:13) quickxyan написал(а):
да способ рабочий . но все же как залить каждую строчку в массив? у себя я это решил.

спасибо за разъяснения регулярок, но в простых я и так разбираюсь, а вот в закрученных уже надо сидеть и думать)

Спустя 5 минут, 34 секунды (24.12.2010 - 23:19) hellmin написал(а):
На мой последний пример обратите внимание. Там все работает. Используется другая функция preg_match_all().

quickxyan
Надо еще проверять что ты вытащил! Ну это если своим вариантом воспользуешься.
$data='sdfs8063d3249087ddfs80443345343fff';

while(strpos($data, "80")){

$string = substr($data, strpos($data, "80"), 11);
if(is_numeric($string))
{
$a[]=$string;
echo $string.'<br>';
}
$data = str_replace($string,'',$data);
}

Спустя 9 минут, 18 секунд (24.12.2010 - 23:28) Dron19 написал(а):

$data='sdfs80633249087ddfs80443345343fff';
$preg = preg_replace("/(.*?)([0-9]+)(.*?)([0-9]+)(.*)/i","\\2 \\4",$data);
$massive = explode(" ",$preg);

Лови код
$massive[0] - 80633249087
$massive[1] - 80443345343

Как ты и хотел, и кода мало и быстро работать будет, самый оптимальный вариант

Спустя 1 минута, 53 секунды (24.12.2010 - 23:30) Dron19 написал(а):
Цитата (hellmin @ 24.12.2010 - 20:19)
На мой последний пример обратите внимание. Там все работает. Используется другая функция preg_match_all().

quickxyan
Надо еще проверять что ты вытащил! Ну это если своим вариантом воспользуешься.
$data='sdfs8063d3249087ddfs80443345343fff';

while(strpos($data, "80")){

$string = substr($data, strpos($data, "80"), 11);
if(is_numeric($string))
{
$a[]=$string;
echo $string.'<br>';
}
$data = str_replace($string,'',$data);
}

Я не понимаю, нахрена столько бестолковой работы, зачем ты свой новый велосипед создаешь?

Спустя 1 минута, 40 секунд (24.12.2010 - 23:32) Dron19 написал(а):
Ты только посчитай разницу, между моим кодом и его, у него команд элементарно даже больше

Спустя 57 секунд (24.12.2010 - 23:33) hellmin написал(а):
Вот это ([0-9]+) любое число начиная от 0 и заканчивая бесконечностью.
А вдруг в строке будет 50 номеров, то надо будет 50 раз повторить (.*?)([0-9]+) ?

Спустя 45 секунд (24.12.2010 - 23:34) hellmin написал(а):
Dron19
Цитата
Ты только посчитай разницу, между моим кодом и его, у него команд элементарно даже больше

А ты между моим и своим

Спустя 31 секунда (24.12.2010 - 23:34) Dron19 написал(а):
Цитата (hellmin @ 24.12.2010 - 20:34)
Dron19
Цитата
Ты только посчитай разницу, между моим кодом и его, у него команд элементарно даже больше

А ты между моим и своим

вот и посчитай, в моем и своем

Спустя 1 минута, 10 секунд (24.12.2010 - 23:35) Dron19 написал(а):
советую Вам подучить материал по регулярным выражениям, а потом уже чушь нести wink.gif

Спустя 2 минуты, 15 секунд (24.12.2010 - 23:38) hellmin написал(а):
Мой код
preg_match_all("/(80[0-9]{9})/i",$data, $matches);
//Используется одна функция
//$matches - массив с телефонами

Твой код
$preg = preg_replace("/(.*?)([0-9]+)(.*?)([0-9]+)(.*)/i","\\2 \\4",$data);
$massive = explode(" ",$preg);
//Используются две функции и две операции присваивания
//$massive - массив с телефонами

Спустя 4 минуты, 16 секунд (24.12.2010 - 23:42) linker написал(а):
/(80[0-9]{9})/i - не пройдет, если номер телефона не начинается с 80 и/или если количество последующих цифр менее или более 9.

Спустя 2 минуты, 9 секунд (24.12.2010 - 23:44) Dron19 написал(а):
Цитата (hellmin @ 24.12.2010 - 20:38)
Мой код
preg_match_all("/(80[0-9]{9})/i",$data, $matches);
//Используется одна функция
//$matches - массив с телефонами

Твой код
$preg = preg_replace("/(.*?)([0-9]+)(.*?)([0-9]+)(.*)/i","\\2 \\4",$data);
$massive = explode(" ",$preg);
//Используются две функции и две операции присваивания
//$massive - массив с телефонами

вот вот, у меня строка разбирается по ее составу, поэтому это одна команда, он не будет посимвольно проходить

Спустя 19 секунд (24.12.2010 - 23:44) quickxyan написал(а):
СПАСИБО - можна закрывать тему уже, я понял, что нужно было самому подумать, а не просить помощи - да и велостпед выдумывать не стоило, но каждый придумывает свое решение)

Спустя 34 секунды (24.12.2010 - 23:45) Dron19 написал(а):
короче, подучи регулярки, завязываем этот бестолковый спор, все равно он не к чему не приведет

Спустя 35 секунд (24.12.2010 - 23:45) Dron19 написал(а):
верно =)

Спустя 2 минуты, 12 секунд (24.12.2010 - 23:48) hellmin написал(а):
linker
Условие пройдет.
Номер начинается на 80 и ко-во цифр 11

Спустя 18 минут, 12 секунд (25.12.2010 - 00:06) quickxyan написал(а):
а как найти 7 цифр в строке которые идут подряд, но я не знаю что это за цифры? что-то читаю регулярки и переатриваю ваши, но все равно не доходит (

вот попробывал, но почему-то не работает.


$preg = preg_replace(""/([0-9]+{7})/i"","\\2 \\4",$data);

Спустя 12 минут, 15 секунд (25.12.2010 - 00:18) Dron19 написал(а):

Спустя 2 минуты, 36 секунд (25.12.2010 - 00:21) quickxyan написал(а):
спс, перечитал именно это. все равно не все ясно

Спустя 2 минуты, 33 секунды (25.12.2010 - 00:23) Dron19 написал(а):
значит плохо перечитал, читай внимательней, мне хватило один раз прочитать и по-составлять простенькие регулярные выражения, а дальше норм пошло, читайте еще, составляйте простые решения

Спустя 51 минута, 12 секунд (25.12.2010 - 01:14) Invis1ble написал(а):
quickxyan
Цитата
вот попробывал, но почему-то не работает.
$preg = preg_replace(""/([0-9]+{7})/i"","\\2 \\4",$data);

у тебя тут кавычки лишние + обращаешься к неопределенным карманам

Спустя 7 часов, 44 минуты, 20 секунд (25.12.2010 - 08:59) quickxyan написал(а):
вроде рахобрался с регулярками, но проблема массивов меня просто гнетет уже.
если пишу так:

$data='sjfhjsd3333563dsf7765432ssdsdf';
$preg = preg_match_all("/[0-9]{7}/i",$data,$matches);
print_r($matches);


выводит:


Array ( [0] => Array ( [0] => 3333563 [1] => 7765432 ) )


если же вывожу в цыкле:

$data='sjfhjsd3333563dsf7765432ssdsdf';
$preg = preg_match_all("/[0-9]{7}/i",$data,$matches);
foreach($matches as $val){
echo $matches;
}


выводит:



Array


вопрос - где ошибка?

Спустя 7 минут, 59 секунд (25.12.2010 - 09:07) quickxyan написал(а):
ага понял - просто это двухмерный массив получаеться.


$data='sjfhjsd3333563dsf7765432ssdsdf';
$preg = preg_match_all("/[0-9]{7}/",$data,$matches);
//print_r($matches);
echo $matches[0][0];
echo $matches[0][1];


реультат


33335637765432


что мне и нужно было)

---------------------------

а как выести в цыкле двухмерный массив? через foreach, array_values не работает. пробовал через функцию count узнать количество элементов массива. но выводит 1, а там их 3 .

Спустя 2 минуты, 5 секунд (25.12.2010 - 09:09) hellmin написал(а):
foreach($matches[0] as $val){
echo $val;
}

Спустя 19 минут, 30 секунд (25.12.2010 - 09:28) quickxyan написал(а):
огромное спасибо! я уже и так и сяк пробовал, а он нивкакую)


_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.