preg_match("/&kind=(.*?)&/", $mytext2, $match)
Хочу вывести все, что встречается между &kind и &. Но выводится в том числе и &kind=&. Как исправить?
Спустя 13 минут, 40 секунд (7.05.2012 - 12:45) nugle написал(а):
разбирай через preg_match_all, первый индекс массива и будет твой результат
Спустя 43 минуты, 38 секунд (7.05.2012 - 13:28) ulmost_clever написал(а):
может я не правильно объяснил.
к примеру в строке есть &kind=учу php&, то выводится учу php
а если в строке есть &kind=&, то надо чтобы это проигнорировалось.
к примеру в строке есть &kind=учу php&, то выводится учу php
а если в строке есть &kind=&, то надо чтобы это проигнорировалось.
Спустя 42 минуты, 59 секунд (7.05.2012 - 14:11) nugle написал(а):
вместо (.*?) - (.+)
Спустя 8 минут, 38 секунд (7.05.2012 - 14:20) ulmost_clever написал(а):
я когда так делаю, то у меня начинает выводить еще и что после этого выражения стоит, до конца строки
Спустя 4 минуты, 8 секунд (7.05.2012 - 14:24) ulmost_clever написал(а):
$rewrite=fopen("log2.txt","r");
$sort=fopen("sort.txt","w");
while (!feof($rewrite))
{
$mytext2=fgets($rewrite); //читаем строку
if(preg_match("/&kind=(.+)&/", $mytext2, $match))
{
fwrite($sort,"/$match[1]");
$k++;
if(preg_match("/&kind=&/", $mytext2, $match))//считаем оборванные запросы
{
$d++;
}
}
else $s++;
}
$all=$k-$d;
echo "<div style='border:1 px solid black;width:430px;text-align:center;margin-bottom:2px;background-color:#ddd'>Оборванных запросов: $s</div>";
echo "<div style='border:1 px solid black;width:430px;text-align:center;margin-bottom:2px;background-color:#ddd'>Непустых запросов: $all</div>";
echo "<div style='border:1 px solid black;width:430px;text-align:center;margin-bottom:2px;background-color:#ddd'>Пустых запросов: $d</div>";
fclose($rewrite);
fclose($sort);
вот файл: http://depositfiles.com/files/0mylom2if
$sort=fopen("sort.txt","w");
while (!feof($rewrite))
{
$mytext2=fgets($rewrite); //читаем строку
if(preg_match("/&kind=(.+)&/", $mytext2, $match))
{
fwrite($sort,"/$match[1]");
$k++;
if(preg_match("/&kind=&/", $mytext2, $match))//считаем оборванные запросы
{
$d++;
}
}
else $s++;
}
$all=$k-$d;
echo "<div style='border:1 px solid black;width:430px;text-align:center;margin-bottom:2px;background-color:#ddd'>Оборванных запросов: $s</div>";
echo "<div style='border:1 px solid black;width:430px;text-align:center;margin-bottom:2px;background-color:#ddd'>Непустых запросов: $all</div>";
echo "<div style='border:1 px solid black;width:430px;text-align:center;margin-bottom:2px;background-color:#ddd'>Пустых запросов: $d</div>";
fclose($rewrite);
fclose($sort);
вот файл: http://depositfiles.com/files/0mylom2if
Спустя 33 минуты, 17 секунд (7.05.2012 - 14:57) ulmost_clever написал(а):
Задача изменилась, я кажется понялиз-за чего возникает путаница, теперь нужно заменить &kind=ololo& на &kind=ololo+
делал так:
делал так:
$text2=preg_replace("/&kind=(.*?)&/","/&kind=(.*?)+/",$text);но что-то не работает
Спустя 3 минуты, 49 секунд (7.05.2012 - 15:01) nugle написал(а):
$text2=preg_replace("/&kind=(.*?)&/","/&kind=$1+/",$text);
Спустя 11 минут (7.05.2012 - 15:12) ulmost_clever написал(а):
получилось, только почему-то в некоторых случаях работает не как надо:
1.если у нас есть &kind=&002S21P04=& мне надо, чтобы было &kind=+002S21P04=& а получается &kind=&002S21P04=+
1.если у нас есть &kind=&002S21P04=& мне надо, чтобы было &kind=+002S21P04=& а получается &kind=&002S21P04=+
Цитата |
с этим разобрался, сделал preg_replace("/&kind=(.*?)&/","/&kind=$1+/",$text); |
2. если у нас есть &kind=(A=Семенова$)& то не меняется, я заметил,что не меняется всегда если после &kind= стоит первая скобка, если стоит просто слово, то все норм.
Спустя 17 минут, 12 секунд (7.05.2012 - 15:29) alexbel2404 написал(а):
echo $match[1];
к первому посту
Спустя 4 часа, 35 минут (7.05.2012 - 20:04) ulmost_clever написал(а):
Цитата (ulmost_clever @ 7.05.2012 - 13:12) | ||
получилось, только почему-то в некоторых случаях работает не как надо: 1.если у нас есть &kind=&002S21P04=& мне надо, чтобы было &kind=+002S21P04=& а получается &kind=&002S21P04=+
2. если у нас есть &kind=(A=Семенова$)& то не меняется, я заметил,что не меняется всегда если после &kind= стоит первая скобка, если стоит просто слово, то все норм. |
2 проблема еще актуальна =(
Спустя 3 часа, 44 минуты, 34 секунды (7.05.2012 - 23:49) neadekvat написал(а):
Цитата (ulmost_clever @ 7.05.2012 - 17:12) |
почему-то в некоторых случаях работает не как надо: |
Не почему-то, а потому что так проипсано в регулярном выражении.
Сформулируй задачу как следует.
Спустя 15 минут, 34 секунды (8.05.2012 - 00:05) inpost написал(а):
.*? - любой символ любое количество раз (включая 0) И знак вопроса - отключает жадный поиск
от 0 до бесконечности - это *, от 1 до бесконечности - это +.
Если в условии 1 или более символов, 0 не подходит, то поменяй * на +. При этом подумай сам, нужно ли отключать жадный поиск тебе...
Не забудь, что для кодировки UTF-8 нужен модификатор u
от 0 до бесконечности - это *, от 1 до бесконечности - это +.
Если в условии 1 или более символов, 0 не подходит, то поменяй * на +. При этом подумай сам, нужно ли отключать жадный поиск тебе...
Не забудь, что для кодировки UTF-8 нужен модификатор u