Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Автор: Cheery
Дата сообщения: 19.05.2011 01:12
gorakh

Цитата:
регулярное выражение для таблицы

делающее что? про такие вещи тоже не забывайте
Автор: gidrosoldat
Дата сообщения: 07.06.2011 11:51
Алоха, нужна помощь в составлении регулярного выражения:
есть вот такая кривая строчка (предполагаемая зарплата):
$salary[1] ='

от 35 000

до 120 000

руб. ';
надо из нее выдернуть эти две цифры.
Делаю так, но мой вариант не всегда срабатывает.



Код: if(preg_match('#от\s([\d\s]+)\sдо\s([\d\s]+)\s(.+)$#ui', $salary[1], $opt))
{
$min = preg_replace('#\s#ui', '', $opt[1]);
$max = preg_replace('#\s#ui', '', $opt[2]);
}
Автор: sitd777
Дата сообщения: 09.06.2011 14:03
проверил - работает

если заменить в выражении # на /


Код:
if(preg_match('/от\s([\d\s]+)\sдо\s([\d\s]+)\s(.+)$/ui', $salary, $opt))
Автор: Dima555555
Дата сообщения: 09.07.2011 16:59
$str = 'id="10" fdsafdas id="20"" afdsfdasfd id="30" fafafaaaads';
preg_match_all('#(id\="\d+")#is', $str, $match);
print_r($match);

подскажите, куда и как поставить '$' что в массиве было только последнее значение т.е. id="30"
Автор: alltrash
Дата сообщения: 09.07.2011 22:52
Dima555555
$ обозначает конец строки, а не последнее вхождение

сделай так echo $match[1][sizeof($match)];
Автор: holden321
Дата сообщения: 10.07.2011 16:19
подскажите как удалить все до первого нужного символа
допустим до первого двоеточия
из "one:two:three" нужно получить "two:three"
если делать preg_replace("/.*:(.*)/","$1","one:two:three") то результат "three"
типо жадность срабатывает,
а если добавить "?" preg_replace("/.*:?(.*)/","$1","one:two:three") то вообще пустая строка в итоге ;(
Автор: alltrash
Дата сообщения: 10.07.2011 16:46
holden321
тут можно обойтись и без рег. выр.

Код:
<?php
$str = 'one:two:three';
echo substr(strstr($str, ':'), 1);
?>
Автор: holden321
Дата сообщения: 10.07.2011 17:07
спасибо, работает :)
не то что очень хочеться но регулярка больше подходит потому что будут еще другие преобразования там же
Автор: Nagolder
Дата сообщения: 22.07.2011 21:44
Немного не в тему, но не создавать же отдельный топик из-за мелкого вопроса .

$_POST['MyTextarea']=str_replace('href="//','href="',$_POST['MyTextarea']);
Не работает.

$_POST['MyTextarea']=str_replace('//','',$_POST['MyTextarea']);
Работает, но мне нужен именно первый вариант. Подскажите пожалуйста, что я не так делаю?

использовал str_replace как простейшую функцию, здесь многого и не надо. Регулярку вставлять придется, если не решу в этом виде.

Заранее благодарен.

UPD: Все, вопрос снят, посыпаю голову пеплом и извиняюсь, что отнял время Обычная невнимательность, не заэкранировал кавычки... Затык. Типа смотришь в книгу, а видишь фигу
Автор: S1NT3Z
Дата сообщения: 28.07.2011 22:38
как из строки
cpe.php?id=59941&pa=0&r=19

вынуть значение id, т.е. 59941 ??
Автор: kivan
Дата сообщения: 01.08.2011 12:08
S1NT3Z
Вариант 1:

Код: $subject = 'cpe.php?id=59941&pa=0&r=19';
parse_str(parse_url($subject, PHP_URL_QUERY), $output);
echo $output['id'];
Автор: alexbel31
Дата сообщения: 10.08.2011 12:15
Добрый день.

Есть HTML код

Код:
<span class="jr_fieldtitle-contentview">Мировая премьера</span>: <span class="jr_fieldvalue-contentview">12.08.2011 г.</span><br />
<span class="jr_fieldtitle-contentview">Премьера в России</span>: <span class="jr_fieldvalue-contentview">25.08.2011 г.</span><br />
Автор: Nagolder
Дата сообщения: 13.08.2011 03:02
Прошу помощи у специалистов. До самого не доходит, запутался совсем

Не могу решить следующую проблему:

в строковой переменной уже есть html (содержимое из визивига). Необходимо пропарсить ее и если картинка имеет class="lb", то заменить к примеру
<img alt="text" class="lb" src="/images/name.jpg" />
на
<a title="text" rel="lytebox" href="/images/name.jpg"><img alt="text" class="dborder" src="/images/name-k.jpg" /></a>
и при каждом нахождении запускать еще надо внешнюю функцию (к примеру thumb($image_name)) которая и будет создавать превьюшки с соответствующим суффиксом. Сама функция есть и прекрасно работает.



Помогите пожалуйста, мозги уже кипят


PS. Понятно, что готовое решение не прошу. Но хотя бы саму регулярку и логику помогите построить пожалуйста...
PPS. На другом форуме подсказали решение. Вопрос снимается. Если кому интересно - вот решение:


Код:
<?php

$t='<img width="300" alt="text123" class="lb" height="150" src="/images/name1.jpg" />
<br>
<img width="300" alt="text1234" class="lb1" height="150" src="/images/name2.jpg" />
<br>
<img alt="text321" class="lb" src="/images/name3.gif" />';


if(preg_match_all('#class="lb".*src="/images/(.*\.(jpg|png|gif))"#mUsi',$t,$k)){

for($c=0;$c!=count($k[1]);$c++){

$this->thumb($k[1][$c]);


}

}
echo "<br /><br /><br /><br />";
$t=preg_replace('#\<img(.*)alt="(.*)"(.*)class="lb"(.*)src="(.*)\.(jpg|gif|png)\"(.*)>#mi','<a title="\2" rel="lytebox" href="\5.\6"><img alt="\2" class="dborder" src="\5-k.\6" /></a>',$t);


echo $t;

?>
Автор: Mamay
Дата сообщения: 19.08.2011 11:40
alexbel31

Код: $str = '<span class="jr_fieldtitle-contentview">Мировая премьера</span>: <span class="jr_fieldvalue-contentview">12.08.2011 г.</span><br />
<span class="jr_fieldtitle-contentview">Премьера в России</span>: <span class="jr_fieldvalue-contentview">25.08.2011 г.</span><br /> ';
preg_match_all('~<span class="jr_fieldvalue-contentview">([^<]*)~is',$str,$match);
Автор: Karpenkos
Дата сообщения: 08.11.2011 13:01
Как сделать так, чтоб если человек вкинул URL сайта, то его сразу переносило в теги <a></a>
Например, я в комментарии, написал: http://site.com/

И после добавления, строка http://site.com/ меняется на <a href="http://site.com/">http://site.com/</a>
Автор: Nagolder
Дата сообщения: 08.11.2011 17:42

Цитата:
строка http://site.com/ меняется на <a href="http://site.com/">http://site.com/</a>





$text = preg_replace('#(?<!\])\bhttp://[^\s\[<]+#i', "<a href=\"$0\">$0</a>", $text);

Взято откуда-то из примеров, сам не проверял.
Автор: Karpenkos
Дата сообщения: 09.11.2011 12:51
Nagolder
Спасибо большое, работает на ура.
А можете ещё написать или найти, чтоб если кинуть ссылку просто site.com, без приставки http:// то её тоже преобразовывало...
Автор: Nagolder
Дата сообщения: 09.11.2011 17:30
Karpenkos

Цитата:
А можете ещё написать или найти

Ну это наверно перебор. Гугль работает, яндекс тоже. Все ключевые слова для поиска в постах последних есть. Надо ведь немного и своей головой подумать. Не все же на готовеньком...
Автор: Karpenkos
Дата сообщения: 09.11.2011 18:43
Nagolder
такого очень мало где найти можно.

Помогите пожалуйста)
Автор: Nagolder
Дата сообщения: 09.11.2011 21:55
Karpenkos
http://yandex.ru/yandsearch?text=%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5+%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2%D1%8B%D0%B1%D0%BE%D1%80+%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA&lr=101

И сверху вниз... Если совсем начинающий, то можно начать с http://www.phpfaq.ru/regexp

PS. Не надо считать меня гуру в этом вопросе, я сам только постигаю эту тему. И здесь на форуме спрашиваю, и в поисковиках ищу. Просто когда стоит вопрос "Напиши за меня" - никакого желания помогать не возникает. А если что-то не получается в процессе, то специалисты руборда помогут обязательно, проверено на себе
Автор: Karpenkos
Дата сообщения: 10.11.2011 14:04
Nagolder
Также, перевод ссылки. идет с приставкой http а если без неё, то ссылки не будет.
Будет просто текст, вот в этом моя проблема.
Автор: Nagolder
Дата сообщения: 11.11.2011 23:54
Karpenkos

Цитата:
вот в этом моя проблема.

Да нет никакой проблемы! Есть просто нежелание почитать основы. Никто за Вас делать не будет и готовые скрипты на блюдечке не поднесет. Я дал пример раньше. Надо просто посмотреть, что на что меняется и при каких условиях. И отредактировать в своих целях. Понемногу учась и получая опыт.

А вот если не будет получаться в процессе обучения, то тогда нерабочие примеры в студию. Народ укажет на ошибки и подскажет верный путь.

И только так...
Автор: Karpenkos
Дата сообщения: 12.11.2011 15:29
Nagolder
ну а помочь, можете?
Автор: Nagolder
Дата сообщения: 12.11.2011 15:42
Karpenkos

Цитата:
ну а помочь, можете?

Ну а я что делал все это время????? Вместо того, чтоб лежать на диване в выходные и смотреть телевизор, я в меру своих сил и знаний объяснял и показывал, что и как надо делать.

Если Вам надо готовые рабочие оттестированные скрипты, а не помощь при обучении - то добро пожаловать на любой фриленс-ресурс. Там Вам за конкретную денежку все сделают и не надо будет бить пальцы о клаву, выпрашивая подачки.

А если хотите научиться - выше уже написал я, что и как Вам надо делать.
Выбор за Вами. А у меня, как и большинства форумчан, нет ни времени ни желания делать за Вас Вашу работу. И помогать не желающему учиться - тоже.
Автор: tolyn77
Дата сообщения: 23.11.2011 06:51
всем привет!

подскажите как переделать?
$vals[$k] = "'" . ereg_replace("([^\\])'","\1".chr(92)."'",ereg_replace('["\']',"&quot;",$GLOBALS[$v])) . "'";
на preg_replace?
так не работает
$vals[$k] = "'" . preg_replace('([^\\])'',"\1".chr(92)."'",preg_replace('["\']',"&quot;",$GLOBALS[$v])) . "'";
заранее благодарен
Автор: duhon
Дата сообщения: 23.11.2011 14:34
я переделал но странная регулярка, непонятно зачем такое писать

$vals[$k] = "'" . preg_replace('/([^\\\])/','$1'.chr(92)."'", preg_replace('/["\']/',"&quot;", $GLOBALS[$v])) . "'";

что не понятно
1) preg_replace('/["\']/',"&quot;", $GLOBALS[$v]) это уже можно заменить функциями типа htmlentities, htmlspecialchars

2) первая регулярка ([^\\]) грубо говоря делает следущее, находит любой 1 символ, кроме \, и ставит за ним знак \.
тоесть текст aabb превратиться в a\a\b\b\

надеюсь тебе оно надо.
Автор: tolyn77
Дата сообщения: 23.11.2011 14:39
duhon
спасибо, ошибка исчезла! у нас сайт разрабатывала одна команда и после обновления софта вот такие вот вещи появились, а исправлять только за деньги Я сам не программер в регулярках вообще очень туго понимаю
а это как можно изменить?
text => ereg_replace("\r\n", "\\r\\n", addslashes($r["text"]))
заранее благодарен
Автор: duhon
Дата сообщения: 23.11.2011 14:51
вот это уже очень смешно, замени ее на addslashes($r["text"]) и все будет такое же.
дело в том что регулярка ничего не делает, заменят символы на сами себя тоесть ничего не меняеться.
но если нужно пользуйся preg_replace("/\r\n/", "\\r\\n", addslashes($r["text"]))

что бы перевести регулярку с ereg на прег как минимум попробуй поставить ограничителя регулярки, тоесть "\r\n" => "/\r\n/" или "#r\n#" или "%\r\n%" или "|\r\n|" или "~\r\n~"
тоесть каким символом открыл таким и закрой, но что бы этот ограничительный символ не присуствовал внутри самой регулярки по аналогии с " и '

кстати я догадываюсь зачем такую странную регулярку хотели сделать, возможно он опечатался.
замени на preg_replace("/\r?\n/", "\\r\\n", addslashes($r["text"]))

это нормализирует разделение строк между разными операционками, в данном случае выставленно для виндовса

или дла юникса
preg_replace("/\r\n/", "\\n", addslashes($r["text"]))
Автор: tolyn77
Дата сообщения: 09.12.2011 13:56
duhon

Цитата:
тоесть текст aabb превратиться в a\a\b\b\

а у меня превращается в a'a'b'b' хотя должен быть aabb
Автор: duhon
Дата сообщения: 09.12.2011 15:07
вот это конструкция echo "'" . preg_replace('/([^\\\])/','$1'.chr(92)."'", preg_replace('/["\']/',"&quot;", 'aabb')) . "'";
делает на выходе 'a\'a\'b\'b\''

теперь по пунктам кто что делает
1) preg_replace('/["\']/',"&quot;", 'aabb') превращает aabb в aabb, тоесть ничего не делает, но если входящий текст будет a'ab'b то превратит в a&quot;ab&quot;b

-потом получившийся текст передаеться в следующую функцию выглядит приблизительно так
2) preg_replace('/([^\\\])/','$1'.chr(92)."'", 'aabb') превращает текст aabb в a\'a\'b\'b\' тоесть после каждого символа ставит \' , я незнаю зачем это может понадобится.

-потом текст a\'a\'b\'b\' еще дополнительно обворачиваеться "'" . a\'a\'b\'b\' . "'" и на выходе 'a\'a\'b\'b\''

и это уже на голову вообще не налазит, вместо этой страшно непонятной констукции наверно можно воспользоваться функциями типа htmlentities, htmlspecialchars
и все проблемы исчезнут

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Xitami Web Server + PHP+ zend optimizer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.