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

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

Автор: ForposT_ForeveR
Дата сообщения: 03.05.2009 21:44

Цитата:
ты уже как-то пытался это сделать?

Честно сказать, даже не знаю с какой стороны подойти
Автор: EGORR_TOO
Дата сообщения: 03.05.2009 22:57
Тогда RTFM...
Начни отсюда _http://www.phpclub.ru/detail/article/regexp_1
Там все разжевано. Я тоже регулярок всегда старался избегать.
А тут пришлось. Так эта статья мне здорово помогла в ликвидации моей дремучести.
И ещё чудная книга Фридл Дж. "Регулярные выражения"
На странице автора _http://regex.info есть линк на питерский издательский дом, где её можно заказать.
А скачать её можно... Не буду говорить где, а то модер отшлепает. Буде надо, - стучись в личку.
Автор: EGORR_TOO
Дата сообщения: 05.05.2009 12:08
Проблему, о которой я писал несколькими постами выше, я по научению уважаемого Cheery решил. Однако возникли сомнения вот какого рода. Передача аргумента функции через массив GLOBAL чревата ошибками. Если два админа сайта начнут обращаться к этой функции, значение global $arr изменит обратившийся к ней позднее. И тогда первый получит ошибочный результат. Вообще черт знает, что может вытвориться.
Первое что мне пришло в голову, это использовать $_SESSION. Но не будет ли это брешью в безопасности? Или может есть более надежный способ? Или может использовать $$. Но старые, бородатые, мудрые программеры советуют избегать использовать $$.
Автор: ForposT_ForeveR
Дата сообщения: 06.05.2009 11:37
Здравствуйте.
Начал изучать регулярные выражения. Пробовал написать код, для реализации идеи (см. пост выше)


Цитата:
preg_match_all('#href="?((.*?)/lala/([^>" ]*?))#ims', $html, $arr);

Но, к сожалению, данная строка кода выдаёт не тот результат, который хотелось бы.
Автор: Cheery
Дата сообщения: 06.05.2009 17:35
EGORR_TOO

Цитата:
Если два админа сайта начнут обращаться к этой функции, значение global $arr изменит обратившийся к ней позднее. И тогда первый получит ошибочный результат. Вообще черт знает, что может вытвориться.

о чем вы??? global распространяется только на данный запуск скрипта, а не на все запущенные копии одновременно.

ForposT_ForeveR

Цитата:
Но, к сожалению, данная строка кода выдаёт не тот результат

примененная к какому тексту?
Автор: Dimonius
Дата сообщения: 09.05.2009 11:49
Помогите, пожалуйста, из переменной вида /pumpurum_page3452/ получить число после слова page, разрядность числа может быть разной, т.е. и 2 и 24 и т.д.
Спасибо.
Автор: Crocell
Дата сообщения: 09.05.2009 15:32
@Dimonius

^/\w+?(\d+)/$ (для preg_match будет выглядеть так: '/^\/\w+?(\d+)\/$/' )
Автор: koc
Дата сообщения: 23.05.2009 13:12
есть строки

Код:
        'template'    : "/goodsViev.htm",
        'show'    : "yes"
Автор: Cheery
Дата сообщения: 23.05.2009 19:51
koc

Цитата:
нужно их преобразовать к массиву. Как видно кавычки могут быть разные, отступы тоже. Хелп плизз.

split по : (если не будет в кавычках его)
потом trim и убрать кавычки.. это если в лоб без регулярок
иначе что то вида
preg_match_all("/(\'|\")(\w+)\\1\s*:\s*(\'|\")(.*)\\3/mU",$str,$matches);
Автор: koc
Дата сообщения: 23.05.2009 20:11
Cheery
спасибо, буду пробовать.
Дополнительно вопрос задал тут _http://www.php.ru/forum/viewtopic.php?t=18926

зы: возможно будут кавычки в кавычках или двоеточие в кавычках
Автор: Cheery
Дата сообщения: 23.05.2009 20:22
koc

Цитата:
зы: возможно будут кавычки в кавычках или двоеточие в кавычках

и? что, регулярка не работает?

ps: одного не пойму - зачем дублировать вопросы в разных форумах. если не ждете от нас помощи, то зачем тут?
Автор: koc
Дата сообщения: 23.05.2009 23:58
Cheery
так, что б наверняка. Все равно люди с похапе.ру тут врятли бывают. Равно как и наоборот.

а предложенная регулярка в онлайн-конструкторе чего-то отказывалась работать.
Автор: Cheery
Дата сообщения: 23.05.2009 23:59
koc

Цитата:
а предложенная регулярка в онлайн-конструкторе чего-то отказывалась работать.

что такое "онлайн" конструктор и на чем именно не работает?
Автор: koc
Дата сообщения: 24.05.2009 00:51
ну типа вот

_http://www.gskinner.com/RegExr/

Тестировал на строках, которые запостил выше.
Автор: Cheery
Дата сообщения: 24.05.2009 00:53
koc

Цитата:
Тестировал на строках, которые запостил выше.

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

Код: <?php
$str=<<<TXT
'template' : "/goodsViev.htm",
'show' : "yes"
'template': '/listGoods.htm'
"orderBy":'rank'
TXT;
preg_match_all("/(\'|\")(.*)\\1\s*:\s*(\'|\")(.*)\\3/U",$str,$matches);
print_r($matches);
?>
Автор: koc
Дата сообщения: 24.05.2009 10:13
Cheery
да, действительно работает, спасибо.

Я думал, что регулярки - они и в африке регулярки. По работе не часто с ними сталкиваюсь.

Еще раз спасибо.
Автор: StudioMaX
Дата сообщения: 03.06.2009 14:44
есть строки


Код: <td class="lista" align="center" style="padding-left:10px;"><a href="index.php@page=main&id=8"><span style='color:#f28282'>Text1</span> <img src='images/5552.gif'></a></td>

<td class="lista" align="center" style="padding-left:10px;"><a href="index.php@page=main&id=11464"><span style='color:#006699'>Text2</span> <img src='images/6874.gif'></a></td>

<td class="lista" align="center" style="padding-left:10px;"><a href="index.php@page=main&id=1680"><span style='color:#01C499'>Text3</span> <img src='images/1562.gif'></a></td>
Автор: Cheery
Дата сообщения: 03.06.2009 19:04
StudioMaX
preg_match_all("/span[^>]*>(.*)<\/span>/iU",$str,$matches);
Автор: DarkSmoke
Дата сообщения: 14.06.2009 19:51
Подскажите, как тире разрешить?
ТОлько тире по одному, что бы не было два подрят.
Автор: Cheery
Дата сообщения: 14.06.2009 19:52
DarkSmoke

Цитата:
Подскажите, как тире разрешить?

для начала, как и говорил, сформулировать вопрос полностью, с примерами.
Автор: DarkSmoke
Дата сообщения: 14.06.2009 20:12
есть:

Код: if(!preg_match("/^[а-яА-Я\s\.]+$/", $name_univer))
Автор: Cheery
Дата сообщения: 14.06.2009 20:14
DarkSmoke

Цитата:
Как его сделать не знаю.


Цитата:
[а-яА-Я\s\.\-]

Автор: DarkSmoke
Дата сообщения: 14.06.2009 20:28

Цитата:
[а-яА-Я\s\.\-]

Это будети сколько угодно тире подрят, а мне надо не больше одного.
Автор: Cheery
Дата сообщения: 14.06.2009 20:32
DarkSmoke

Цитата:
Это будети сколько угодно тире подрят, а мне надо не больше одного.

тогда переписывать регулярное выражение
а не проще сделать отдельную проверку?
просто на \-{2,}
вот это проверяет на 2 и более подряд -
Автор: exhugo
Дата сообщения: 18.06.2009 18:07
Помогите пожалуйста.

$str = "enum('apple','banana','orange')";

Как мне получить типы?
Автор: Cheery
Дата сообщения: 18.06.2009 18:09
exhugo

Цитата:
Как мне получить типы?

можно и без регулярки.. explode по '
или же
preg_match_all("/\'(.*)\'/U",$str,$matches);
Автор: eternal2000
Дата сообщения: 26.06.2009 11:25
вобщем не получается у меня написать регулярное выражение
есть код типа этого:


Код: <a class="cat" alt="Настенно потолочный светильник MASSIVE (Бельгия) (30173 35 10)" title="Настенно потолочный светильник MASSIVE (Бельгия) (30173 35 10)" href="index.php?productID=6863">Настенно потолочный светильник MASSIVE (Бельгия) (30173 35 10)</a><br>
<a class="cat" alt="Настенно потолочный светильник MASSIVE (Бельгия) (30173 53 10)" title="Настенно потолочный светильник MASSIVE (Бельгия) (30173 53 10)" href="index.php?productID=6864">Настенно потолочный светильник MASSIVE (Бельгия) (30173 53 10)</a><br>
<a class="cat" alt="Настенно потолочный светильник MASSIVE (Бельгия) (30174 35 10)" title="Настенно потолочный светильник MASSIVE (Бельгия) (30174 35 10)" href="index.php?productID=6865">Настенно потолочный светильник MASSIVE (Бельгия) (30174 35 10)</a>
Автор: Mamay
Дата сообщения: 26.06.2009 13:38
preg_match_all('~<.*href="([^"]*)"[^>]*>([^<]*)<~im',$s,$m);

Добавлено:
$urls = $m[1];
$texts = $m[2];
Автор: eternal2000
Дата сообщения: 03.07.2009 15:37
пасибо, будемс пробовать)
Автор: Mira
Дата сообщения: 25.07.2009 08:26
Подскажите пожалуйста как реализовать следующее.
Нужно после ввода формы разреть ссылки и картинки только на свои сайты.

К примеру. Есть сайты site1.ua site2.ua site3.ua. Вот все ссылки в сообщении делать активными и разрешать...

удаление всех ссылок и всех тегов сделал strip_tags - это просто

что бы не удалять свои сайты сделал типа замены str_replace (array({SITE1},{SITE1},{SITE3}), array("site1.ua","site2.ua","site3.ua"), $msg)

те я хочу при вводе любого урла на эти сайты
1. удалять http:// если он есть - это просто
2. заменять сайты на строки вида ,{SITE3}/url.html на <a href="http://,{SITE3}/url.html ">url.html</a> и картинки ,{SITE3}/folder/pict.jpg на <a href="http://,{SITE3}/}/folder/pict.jpg">}/folder/pict.jpg </a> - это тоже не сложно.

Столкнулся с проблемой не могу правильно распарсить строку.

preg_match_all("|[http://]?([site1\.ua|site3\.ua|site3\.ua])([-_a-z0-9\./]+)|Ui",$msg, $m);

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

спс

Добавлено:
Ой. а может это правильней сделать через preg_replace?

Добавлено:
подскажите пожалуйста, почему вот так работает
preg_replace("|[http://]*site1\.ua([-_a-z0-9\./]+)|im", "[a href={site1}$1]$1[/a]",$msg);

а так нет
preg_replace("|[http://]?site1\.ua([-_a-z0-9\./]+)|im", "[a href={site1}$1]$1[/a]",$msg);

Второе ведь правильней.

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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