PDA

Просмотр полной версии : [Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.


Страницы : 1 2 3 [4] 5

Pashkela
02.11.2009, 21:39
<pre>
<?php
$text = "
<input type='text' name='n1' value='123'>
<input type='text' name='n2' value=''>
<input type='text' name='n3'>
<input type='text' name=\"n3\">
";
preg_match_all("#<input.*name='(.*)'.*value='(.*)'|<input.*name='(.*)'|<input.*name=\"(.*)\"#", $text, $out);
print_r($out);
?>
</pre>

Gifts
03.11.2009, 12:20
mr.The <?PHP
$text = "
<input type='text' name='n1' value='123'>
<input type='text' name='n2' value=\"asdasd\">
<input type='text' name='n3'>
<input type='text' name=\"n3\">
";

preg_match_all('#<input[^<>]*name=([\'"])(?P<name>[^<>]*?)\1([^<>]*value=([\'"])(?P<value>[^<>\4]*?)\4)?#i',$text,$result,PREG_SET_ORDER);
foreach($result as $one)
{
echo $one['name']."=".$one['value']."<br />\n";
}

?>

Zircool
03.11.2009, 21:54
Помогите с регуляркой. Нужны все записи вида



<div class="num_comms"><a href="/News/Detail/id/430450/cat/86/">
<img src="/public/upload/news/430450_finance_economy_central_bank_kursyi_valyut. jpg" alt="Новость Newsland: Центробанк повысил курсы доллара и евро" title="Центробанк повысил курсы доллара и евро">
</a>





<div class="num_comms"><a href="/News/Detail/id/430445/cat/86/">
<img src="/public/upload/news/430445_money_economy_regions_byudzhetyi.jpg" alt="Новость Newsland: Может ли регион стать банкротом?" title="Может ли регион стать банкротом?">
</a>


Cо страницы



http://newsland.ru/Index/news/cat/86/ord/1/




Пробую вот такую регулярку



preg_match_all('#<div class="num_comms"><a href="/News/Detail/id/(\d+)/cat/'.$simbol.'/">(\s+)<img src="(.*?)" alt="(.*?)" title="(.*?)">(\s+)</a>#is',$text,$results);





Где переменная $simbol - это номер раздела, который берется из url раздела..

Architek86
04.11.2009, 14:01
Народ, помогите составить регулярку для preg_split (функция php, кто не в курсе).
А именно: есть текст вида абвгде|a\|b\|c|ёжзий|клмн
Надо его разбить в массив по символу |, причём, там, где этот символ экранируется (т.е. \|) надо пропускать и идти далее.. как... хелп, уже второй день никак не получается.

Т.е. если разбить таким способом мой примерный текст, то должно быть так:


0 => абвгде
1 => a\|b\|c
2 => ёжзий
3 => клмн

krypt3r
04.11.2009, 14:44
Может, так?

$a = preg_split ('#(?<!\\\)\|#', $str);

Architek86
04.11.2009, 15:00
krypt3r, спс, работает на ура!

alwex
08.11.2009, 19:46
здраствуйте, есть текст:
<table style="width: 100%; border: none" cellspacing="0" cellpadding="0">
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/9144/" class="all">Том Хэнкс</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/8887/" class="all">Робин Райт Пенн</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/3100/" class="all">Гэри Синиз</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/519/" class="all">Майкелти Уильямсон</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/13477/" class="all">Сэлли Филд</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/101656/" class="all">Ребекка Уильямс</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/101657/" class="all">Майкл Коннер Хэмпфри</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/69686/" class="all">Харольд Дж. Хертэм</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/101658/" class="all">Джордж Келли</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/8399/" class="all">Боб Пенни</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/19/film/448/" class="all">...</a></td></tr>

</table>

надо парсить все

<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/8399/" class="all">Боб Пенни</a></td></tr> но выдерать только все что в <a></a> внутри...

Pashkela
08.11.2009, 20:08
<pre>
<?php
$arr = '<table style="width: 100%; border: none" cellspacing="0" cellpadding="0">
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/9144/" class="all">Том Хэнкс</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/8887/" class="all">Робин Райт Пенн</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/3100/" class="all">Гэри Синиз</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/519/" class="all">Майкелти Уильямсон</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/13477/" class="all">Сэлли Филд</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/101656/" class="all">Ребекка Уильямс</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/101657/" class="all">Майкл Коннер Хэмпфри</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/69686/" class="all">Харольд Дж. Хертэм</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/101658/" class="all">Джордж Келли</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/8399/" class="all">Боб Пенни</a></td></tr><tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/19/film/448/" class="all">...</a></td></tr>
</table>;';
preg_match_all('#<tr><td.*style.*align=right><a.*href=.*class=.*>(.*)</a></td></tr>#Uis',$arr,$res);
print_r ($res[1]);
?>
</pre>

alwex
08.11.2009, 20:12
спасибо, пашет)

mailbrush
09.11.2009, 16:57
Задача скрипта - найти в файле hosts.txt ссылку на хост, на котором запущен скрипт, и заменить её на $rstring, и вывести рандумно ссылки, но появилась какая-то загадочная проблема - на локалхосте все отлично работает, а когда залить на хост, то ничего не пашет. В чем может быть проблема?

<?php

$fname = 'hosts.txt';
$rstring = 'hackersite.ru';

$hosts = preg_replace('#<a href="http://www\.' . $_SERVER['HTTP_HOST'] .
'">(.*)</a>#', '<a href="http://www.' . $rstring . '">\1</a>', file($fname));

foreach (array_rand($hosts, count($hosts)) as $id)
echo $hosts[$id] . "|\r\n";

?>
hosts.txt

<a href="http://wwww.google.com">Google</a>
<a href="http://wwww.yandex.ru">Yandex</a>
<a href="http://wwww.yandex.ru">Rambler</a>
<a href="http://wwww.myhost.ru">myhost</a>

Pashkela
09.11.2009, 17:10
$_SERVER['SERVER_NAME']

попробуй

mailbrush
09.11.2009, 17:14
$_SERVER['SERVER_NAME']

попробуй
Не пашет....

OnArs
13.11.2009, 23:33
Здравствуйте, ув. Знатоки!

Нужно получить все ссылки попарно в виде:
ссылка - якорь

Но есть НО:
Что если поменяются местами или в теле ссылки есть другие теги? Пример:
<a href="http://site.ru/" rel="nofollow">Якорь</a>
<a rel="nofollow" href="http://site.ru/"></a>
<a rel="nofollow" id="ya23" href="http://site.ru/">Якорь</a>
<a rel="nofollow" id="ya23" href="http://site.ru/" style="font: bold;">Якорь</a>
<a rel="nofollow" id="ya23" class="olink" href="http://site.ru/" style="font: bold;">Якорь</a>

Естественно обычный /href="(.*)" >(.*)<\/a>/ не подходит, как будет выглядеть нужный мне запрос?


Заранее благодарен! :)

m0Hze
13.11.2009, 23:48
/.*href="(.*)".*>(.*)<\/a>/isU

.::BARS::.
14.11.2009, 11:11
есть файлы
dehsg1.jpg dehsg2.jpg dehsg3.jpg dehsg4.jpg
как получить имя только dehsg

могут быть и так
ne-+_.hsud1.jpg ne-+_.hsud2.jpg ne-+_.hsud3.jpg

тогда нужно ne-+_.hsud

krypt3r
14.11.2009, 22:02
preg_match ('/(.+)\d+\.jpg$/', $str, $m);

.::BARS::.
15.11.2009, 08:49
не... не то... там не только .jpg
сделал инче.... спасибо...
чисто.расширение
поотом вырезаю исходник - число.расширение= что хотим

b3
15.11.2009, 15:31
<?php
$dir = scandir($_SERVER['DOCUMENT_ROOT']);
foreach ($dir as $file) {
if(is_file($file))
{
$ext = pathinfo($file);
$file = str_replace('.'.$ext['extension'],'',$file);
echo $file.'<br>'; // Вывод файлов без расширения.
} else {
echo $file.'<br>'; // Вывод папок.
}

}
?>

b3
15.11.2009, 19:37
Здравствуйте, ув. Знатоки!

Нужно получить все ссылки попарно в виде:
ссылка - якорь

Но есть НО:
Что если поменяются местами или в теле ссылки есть другие теги? Пример:
<a href="http://site.ru/" rel="nofollow">Якорь</a>
<a rel="nofollow" href="http://site.ru/"></a>
<a rel="nofollow" id="ya23" href="http://site.ru/">Якорь</a>
<a rel="nofollow" id="ya23" href="http://site.ru/" style="font: bold;">Якорь</a>
<a rel="nofollow" id="ya23" class="olink" href="http://site.ru/" style="font: bold;">Якорь</a>

Естественно обычный /href="(.*)" >(.*)<\/a>/ не подходит, как будет выглядеть нужный мне запрос?


Заранее благодарен! :)


if(preg_match_all('#<a[^>]*? href="(.*?)"#',$data,$l))
$links = $l[1];

Димитрий
16.11.2009, 02:11
в общем есть такая проблема.
есть два сайта- движки на VamShop 1.45, файлы .htaccess одинаковые.. файлы manager.php и redirector.php тоже..( отвечающие за переделку урлов)
ЧПУ включено..
на одном все нормально- редирект работает..

но на одном из них есть такая проблема- в поисковике есть страницы вида
product_info.php?info=p3076
и страницы вида index.php?cat они дублируются естесственно с страницами с нормальными ЧПУ...

редирект получается не работает!!!
больше 100 подобных страниц- наверное не надо обьяснять что это жутко вредно для поисковиков..

через .htaccess не получается сделать изменение..
то есть пишу скажем

Redirect 301 /index.php?cat=c226_Biolit.html http://SAITEGGG.ru/index.php/cat/c226_Biolit.html и это не работает...
может дело в том что знак ? в ссылке не понимает? подобное правило но с прямыми ссылками работает..

понятно, что в вамшопе мало кто понимает, но как сделать чтобы редирект работал через .htaccess
__________________

warlok
16.11.2009, 07:39
помогите правильно составить регулярку, есть поле

<input type='hidden' id='post_ID' name='post_ID' value='4' />

нужно спарсить значение валуе

BrainDeaD
16.11.2009, 08:11
2 warlok
preg_match_all("#<input.*value='(.*)'#", $text, $out);

warlok
16.11.2009, 08:40
что то невыходит, возврашяет пустой массив

BrainDeaD
16.11.2009, 08:49
что то невыходит, возврашяет пустой массивзначит в коде у тебя чтото не то.

вот результат проверки:
Array
(
[0] => <input type='hidden' id='post_ID' name='post_ID' value='4'
[1] => 4
)

вот сам код:
<?PHP
//
$subject = '<input type=\'hidden\' id=\'post_ID\' name=\'post_ID\' value=\'4\' />';
//
$pattern = '#<input.*value='(.*)'#is';
//
$result = preg_match($pattern, $subject, $subpattern);
//
echo '<pre>'.print_r($subpattern, TRUE).'</pre>';
?>

EDIT: результат разумеется в $result, а $subpattern не обязателен, так что можешь его из preg_match удалить, т.е. preg_match($pattern, $subject);

.::BARS::.
17.11.2009, 12:51
<?php
$subject = "<input type='hidden' id='post_ID' name='post_ID' value='123424312' />";
$pattern = "#<input(.*?)value=\'(.*?)\'#is";
$result = preg_match($pattern, $subject, $subpattern);
echo $subpattern[2];
?>
тоже... =)))

Isis
17.11.2009, 13:03
помогите правильно составить регулярку, есть поле

<input type='hidden' id='post_ID' name='post_ID' value='4' />

нужно спарсить значение валуе
<?php
$text = "<input type='hidden' id='post_ID' name='post_ID' value='4' />";
preg_match("#<input.*value='(.*)'#", $text, $out);
echo $out[1];

b3
17.11.2009, 13:42
И вот так еще можно:

<?php
$text = "<input type='hidden' id='post_ID' name='post_ID' value='4' />";
preg_match("#<input[^>]*? value='(.*)'#i", $text, $out);
var_dump($out);
?>

alwex
18.11.2009, 23:23
как на JS сделать что бы проверяло или есть + вначале текста

krypt3r
19.11.2009, 08:08
Как-то не по-русски у вас фраза звучит. Если я ее правильно понял, то

alert (str.match (/^\++/) ? 'yes' : 'no');

alwex
19.11.2009, 11:44
ну типо парсер на проверку телефона. что бы только проверял или есть + впереди

krypt3r
19.11.2009, 14:43
тогда достаточно проверки

alert (str.charAt (0) == '+' ? 'yes' : 'no');

без регулярки

intNet
19.11.2009, 22:06
<input type=submit value=' баланс ($0) '></td></form>
Нужно вычленить баланс. С regexp не дружу :(.

BrainDeaD
19.11.2009, 22:41
intNet
смотря в каком виде баланс нужен. ну типа баланс ($0) или просто $0 или само число?
вот для первого варианта:
$text = "<input type=submit value=' баланс ($0) '></td></form>";
preg_match_all("#<input.*value='(.*)'#", $text, $out);
echo $out[1];

alwex
20.11.2009, 11:00
тогда достаточно проверки

alert (str.charAt (0) == '+' ? 'yes' : 'no');

без регулярки
cпс

.ATK
24.11.2009, 03:26
Голова пухнет, сделайте кто нибудь:

+ddd-ddd-ddddddd или +ddd-dd-ddddddd

d-число от 0 до 9

wolfiki
24.11.2009, 06:07
помогите разобраться с ifrаmе
вообщем проблемма такая есть некий сайт .( ну че греха таить ) для зароботка денех
так вот .принцип такой кликаешь по ссылкам смотриш открывшийся сайт 30-40 сек -- те капает монетка.

хочу сразу сказать о взломе речь не пойдет. вопрс в другом
1 . эм как сделать чтоб открывался ток фрейм с счетчиком времени (без самого сайта ...ну или его содержимого .)

** было **
http://pic.ipicture.ru/uploads/091124/CBVaKqMjww.jpg

а сделать что б было ТАК !!
http://pic.ipicture.ru/uploads/091124/thumbs/ciYVCaUtXG.jpg


2 . возможно ли зделать скрипт обнуляющий счетчик ( по типу сриптов для оперы .. что б не ждать на депозите 60 сек.)
кликнул по ссылке открылась страница и счетчик начал отсчет 30...29 ....и сразу ноль....
http://pic.ipicture.ru/uploads/091124/thumbs/F7RIhE3nvY.jpg


исходный код таких страниц примерно такой
<html>
<head>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<title>адрес сайта ( работодателя) - Система Активной Рекламы</title>

<frameset rows="31,25,*">
<frame marginwidth="0" marginheight="0" name="frminfo" scrolling="no" noresize src="vls.php">
<frame name="frmads" noresize scrolling="no" marginwidth="0" marginheight="0" src="vfa.php">
<frame name="frmsite" src="адрес рекламируемого сайта">
</frameset>

</head>
</html>

если кто поможен дельным советом ,скриптом ( от меня благодарность виде вмз на кошель- телефон )

#Wolf#
24.11.2009, 08:06
Голова пухнет, сделайте кто нибудь:

+ddd-ddd-ddddddd или +ddd-dd-ddddddd

d-число от 0 до 9

preg_match_all('#(\+[0-9]{3}[\-][0-9]{2,3}[\-][0-9]{7})#', $text, $matches);

не "рационально", но работает :)

z00MAN
26.11.2009, 18:19
help :)
<td style="text-align:center">value1</td><td style="text-align:center">blabla</td> <td style="text-align:center">value2</td>
нужно вытащить value1,2 и записать в файл:
value1
value2

Pashkela
26.11.2009, 18:43
<pre>
<?php
$a = '<td style="text-align:center">value1</td><td style="text-align:center">blabla</td> <td style="text-align:center">value2</td>
<td style="text-align:center">value3</td><td style="text-align:center">blabla</td> <td style="text-align:center">value4</td>';
preg_match_all('|<td style="text-align:center">(.*)</td><td style="text-align:center">.*</td>.*<td style="text-align:center">(.*)</td>|',$a,$b);
print_r ($b); # Закоментируй, если не нужен вывод на экран
$c = fopen("123.txt","w");
for ($i = 0; $i < count($b[1]); $i++) {
fwrite ($c, $b[1][$i] . "\r\n" . $b[2][$i] . "\r\n");
}
fclose ($c);
?>
</pre>

GenTao
26.11.2009, 20:16
Что делать ? Геморройная ссылка мне попалась:

<a href="http://www.siteru/login.php?a=log&u=1881654&i=150305" target="_blank">http://www.site.ru/login.php?a=log&amp;u=1881654&amp;i=105305</a>

Прогнал через прег мач алл по тегу а href,но там вылезло ппц ссылок...Потом пытался сохранить часть ссылки после login.php - тоже ничего не вышло.Скрипт должен был в фаил записывать...

ЗЫ: Цель - сохранить

a=log&amp;u=1881654&amp;i=105305 - и ничего более.

Pashkela
26.11.2009, 20:25
что записывать? Перечитай свой вопрос и поправь пост

GenTao
26.11.2009, 20:29
Поправил.

Pashkela
26.11.2009, 20:35
<pre>
<?php
$a = '<a href="http://www.siteru/login.php?a=log&u=1881654&i=150305" target="_blank">http://www.site.ru/login.php?a=log&amp;u=1881654&amp;i=105305</a>
<a href="http://www.siteru/login.php?a=log&u=1881655&i=150306" target="_blank">http://www.site.ru/login.php?a=log&amp;u=1881655&amp;i=105306</a>';
preg_match_all('|<a href=".*\?(.*)".*target="_blank">.*;i=.*</a>|',$a,$b);
print_r ($b[1]);
?>
</pre>

GenTao
26.11.2009, 21:46
Проблема решена:).Спасибо,Pashkela:)

Alpha][
28.11.2009, 05:02
Народ как сделать так , что бы из строки удалялось все кроме цифр ?
Например есть строка 30пра40().5. нужно что бы осталось только 30405

LStr1ke
28.11.2009, 05:24
$str = "30пра40().5.";
$str = preg_replace('#[^0-9]#','', $str);
echo $str;

[dword]
28.11.2009, 13:22
Нужно составить регулярку, чтобы спарсить все IP адреса с файла. Подскажите пожалуйста

m0Hze
28.11.2009, 13:31
preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/")
Совсем елементарная) можно добавить и {1,3} ну и .д.,но для парса подойдет.

b3
28.11.2009, 19:04
preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/")
Совсем елементарная) можно добавить и {1,3} ну и .д.,но для парса подойдет.
Твое регулярное выражение не корректно потому что оно найдет Айпишку даже такого вида 999.999.999.999, а максимально может быть 255.255.255.255
http://regexlib.com/Search.aspx?k=IP+address&c=-1&m=-1&ps=20
тут есть несколько примеров regexp

Pashkela
29.11.2009, 00:46
Твое регулярное выражение не корректно потому что оно найдет Айпишку даже такого вида 999.999.999.999,

и что дальше? Много таких ""некорректных" ip-шек в файлах для парсинга встречал? Или вообще где-нибудь, где надо IP отпарсить? Я - ни разу. А если есть - никаких проблем. В прямом смысле. Без продолжения

PS: Заманали теоретики

b3
29.11.2009, 01:17
PS: Заманали теоретики
Пиши дальше гавно, и утешай себя оправданиями.

rushter
29.11.2009, 01:40
и что дальше? Много таких ""некорректных" ip-шек в файлах для парсинга встречал? Или вообще где-нибудь, где надо IP отпарсить? Я - ни разу. А если есть - никаких проблем. В прямом смысле. Без продолжения

PS: Заманали теоретики
Зачем гавно плодить,которое хоть и редко ,но иногда может спарсить нето ? Более правильное решение всегда лучше.

Pashkela
29.11.2009, 02:33
[del]

b3
29.11.2009, 06:11
кидис, уссался над твоим блогом. Гордись дальше, пока я не подумал вдруг залить тебе шелл, недоделок
Неадеват. У меня нет блога, хацкер. Да и вообще если делают замечание лучше к нему прислушаться, а не нести чушь, эти посты не только мы читаем, новичек возмет с тебя пример и нагавнокодит.

st_megabit
29.11.2009, 13:44
Привет ачат. Есть такой вопросик. Можно ли с помощью mod_rewrite преобразовать URL вида www.name.ru/page.php?company=companyname&page=pagename
к виду companyname.name.ru/pagename??? Если да то как... Заранее благодарен за комментарии.

-Hormold-
29.11.2009, 15:56
Так очень нужна помощь...
Есть текст, в нём бывает - "1612 год", "в 2008 году", "1753 года"... (т.е. с разными окончаниями).
Нужно выдрать все НО БЕЗ "[[" (до числа) и "]]" (после окончания) и заменить на "[[... год..]]"..
Буду очень благодарен!

Deathdreams
29.11.2009, 16:36
2-Hormold-
Кинь кусок или пример текста, чтобы было понятней...

-Hormold-
29.11.2009, 16:58
и выпущенная в России компанией Новый диск 4 августа 2009 года на PC.
В этом тексте надо заменить "2009 года" на "[[2009 год]]а"

krypt3r
29.11.2009, 17:30
$str = preg_replace ('/(\d{4} год)/', '[[$1]]', $str);

?

-Hormold-
29.11.2009, 17:39
Не работает что-то... Нужно что бы было с пробелом до и после.и небыло [[ и ]] (до и после)

-Hormold-
29.11.2009, 18:41
Вот остался только один вопрос, как не сделать что бы он брал только без [[ в начале или ]] в конце?..
у меня получается так:
[[2012 год]]у превращается в [[[[2012 год]]]]у

krypt3r
29.11.2009, 19:25
Попробуйте либо так

$str = preg_replace ('/\[?\[?(\d{4} год)\]?\]?/', '[[$1]]', $str);

либо так

$str = preg_replace ('/(?<!\[\[)(\d{4} год)(?!\]\])/', '[[$1]]', $str);

SultanOFF
29.11.2009, 20:10
имеются файлы картинок с названиями xxx.png, yyy.bmp, ggg.gif и т.д. тоесть с различными расширениями. Делаю регулярку вот такую '(.+?)\.([a-zA-Z]{3})' работать работает :), но вот если у картинки будет название что то в стиле xxx.yyydsd.png то получается совсем не то что ожидалось. Можно в принципе для каждого расширения отдельную регулярку делать, но так дело не пойдет, можно ли в одну регулярку это все уместить?

krypt3r
29.11.2009, 20:29
/[a-z0-9\.]+\.[a-z]{3}/i
/(?:[a-z0-9]+\.)+[a-z]{3}/i

SultanOFF
29.11.2009, 20:43
/[a-z0-9\.]+\.[a-z]{3}/i из названия angry&hungres.png выдало только букву s а второе вообще сообщило об ошибке :(

ПС: пишу на delphi

krypt3r
29.11.2009, 21:36
/[a-z0-9\.&]+\.[a-z]{3}/i

SultanOFF
29.11.2009, 21:52
нифига не работает, если даже файл 1123566.jpg выдает лишь 6 :(

krypt3r
29.11.2009, 21:56
ну читайте тогда маны по регэкспам в делфи

Nelzone
30.11.2009, 07:59
сделайте из /index.php?id=111 в /id111 =\

blaga
30.11.2009, 08:11
$str = "/index.php?id=111";
$str = preg_replace('#[^0-9]#','', $str);
echo "/id".$str;
вроде так.

Nelzone
30.11.2009, 10:26
$str = "/index.php?id=111";
$str = preg_replace('#[^0-9]#','', $str);
echo "/id".$str;
вроде так.

не пашет :(
$str = "/index.php?id=111";
$str = preg_replace('#[^0-9]#','', $str);
echo "/id".$str;

LStr1ke
30.11.2009, 10:39
не пашет :(

Пашет :)
Но эта регулярка будет оставлять только цифры из входящей $str.
-
Как вариант:
<?php
$str = "/index.php?id=1111111params";
preg_match('#/index.php\?id=([a-z0-9]+)#i',$str, $out);
echo "/id".$out[1];
?>
Будет собирать цифры и буквы

programming
30.11.2009, 12:05
Никак не могу разобраться как составить рег. выражение, чтобы выдернуть в массив все страны, а также ссылки на них с этого сайта: http://www.ozon.travel/countries/
Помогите пожалуйста..

Ну или хотя бы просто названия стран..

krypt3r
30.11.2009, 15:28
Уж куда проще

preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m);

alwex
30.11.2009, 17:46
<tr><td colspan=3 style="padding: 10px 10px 20px 20px" class="news">
<span class="_reachbanner_">Влюбиться в&nbsp;вампира&nbsp;— страшно и&nbsp;романтично. Но&nbsp;потерять любимого, решившего ценой разрыва спасти свою девушку от&nbsp;роли пешки в&nbsp;вечном противостоянии кланов &laquo;ночных охотников&raquo;,&nbsp;— это&nbsp;просто невыносимо. Белла Свон мучительно переживает исчезновение Эдварда и&nbsp;безуспешно ищет забвения в&nbsp;дружбе с&nbsp;мальчишкой-индейцем Джейкобом Блэком. Она&nbsp;даже не&nbsp;подозревает, что&nbsp;её лучший друг&nbsp;— порождение ещё одного &laquo;народа Тьмы&raquo;. Народа, куда более жестокого и&nbsp;опасного, чем&nbsp;аристократы-вампиры…</span>
</td></tr>

есть текст такого вида (выше) и надо парсить всё что внутри<span>..</span>
НО там с новой строчки <span>

b3
30.11.2009, 18:03
В регулярке Uis

<?php
$str = '
<tr><td colspan=3 style="padding: 10px 10px 20px 20px" class="news">
<span class="_reachbanner_">Влюбиться в&nbsp;вампира&nbsp;— страшно и&nbsp;романтично. Но&nbsp;потерять любимого, решившего ценой разрыва спасти свою девушку от&nbsp;роли пешки в&nbsp;вечном противостоянии кланов &laquo;ночных охотников&raquo;,&nbsp;— это&nbsp;просто невыносимо. Белла Свон мучительно переживает исчезновение Эдварда и&nbsp;безуспешно ищет забвения в&nbsp;дружбе с&nbsp;мальчишкой-индейцем Джейкобом Блэком. Она&nbsp;даже не&nbsp;подозревает, что&nbsp;её лучший друг&nbsp;— порождение ещё одного &laquo;народа Тьмы&raquo;. Народа, куда более жестокого и&nbsp;опасного, чем&nbsp;аристократы-вампиры…</span>
</td></tr>
';

if(preg_match('#<span.*>(.*)</span>#Uis',$str,$m))
echo $m[1];

?>

alwex
30.11.2009, 18:09
пробовал я так, на той странице есть такого текста с span class="_reachbanner_" кучу потому надо что бы по всему шабу как-то...

blaga
30.11.2009, 18:23
preg_match_all ?

alwex
30.11.2009, 18:26
а как я буду знать именно тот? понимаешь тут же может изменяться... надо хороший шаб

b3
30.11.2009, 18:37
Неужели так тяжело включить мозги и дать ВСЮ страницу и сказать какой именно момент нужно отпарсить, чтоб не растягивать на несколько страниц вытягивая с тебя по одному слову что тебе нужно.

programming
30.11.2009, 19:00
Уж куда проще

preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m);

Спасибо. Ссылки достаются, а как достать названия стран?
Туго у меня идут эти регэкспы.. никак не могу разобраться..
Вот ещё вопрос: почему в preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m); выдирается именно ссылка, а не название?

И рег выражения могут выдирать русские буквы?

b3
30.11.2009, 19:14
Вот ещё вопрос: почему в preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m); выдирается именно ссылка, а не название?
Выдирается тут все, разберем регулярку:
preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m);
В $m[0] будут находится все ссылки с HTML тегами, в $m[1]; будут находится первые вхождения заключенные в фигурные скобки, тоесть все что подходит под (\d+\/) в нашем выражении, ну и в $m[2]; будет все что попадает под (.+?)
Вообщем после регулярки напиши print_r($m); и сам все увидиш.
И рег выражения могут выдирать русские буквы?
Есесно '#[а-я]#i'

programming
30.11.2009, 21:32
Выдирается тут все, разберем регулярку:
preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m);
В $m[0] будут находится все ссылки с HTML тегами, в $m[1]; будут находится первые вхождения заключенные в фигурные скобки, тоесть все что подходит под (\d+\/) в нашем выражении, ну и в $m[2]; будет все что попадает под (.+?)
Вообщем после регулярки напиши print_r($m); и сам все увидиш.

Есесно '#[а-я]#i'

Спасибо.
Вот ещё проблема..
С http://www.ozon.travel/countries/16644/ нужно выдернуть код страны. Как составить рег выражение?
Составлял так:
preg_match_all('/Код страны:<\/strong>(.*)<\/p>/',$out1, $regs1);

whexp
30.11.2009, 21:52
programming
По идее, как ты составил должен выплевывать тебе символ новой строки + 3 табуляции.
Там довольно редко стречается табуляция так что можно зацепиться за нее (Вообще можно просто искать по маске \+\d+ но не факт, что на странице не будет чего-то вроде +0, что не является кодом страны). Так что получается что-то вроде:
\t\t\t(\+\d+)</p>

programming
30.11.2009, 22:31
programming
По идее, как ты составил должен выплевывать тебе символ новой строки + 3 табуляции.
Там довольно редко стречается табуляция так что можно зацепиться за нее (Вообще можно просто искать по маске \+\d+ но не факт, что на странице не будет чего-то вроде +0, что не является кодом страны). Так что получается что-то вроде:
\t\t\t(\+\d+)</p>
Спасибо. Разобрался как выдергивать такие вещи.
Появилась ещё большая проблема. Есть допустим http://www.ozon.travel/countries/1727/ и http://www.ozon.travel/countries/6675/ , а также остальные страны с http://www.ozon.travel/countries/.
Каким образом возможно выдернуть описание с этих страниц? То есть, чтобы шаблон рег выражения подходил ко всем страницам стран. Выдернуть нужно только основное описание, то есть перелёты и т.д. не нужно..
Возможно ли такое осуществить?

whexp
30.11.2009, 23:34
programming
По регулярке собираешь id всех страниц, затем перебирая их открываешь страницу http://www.ozon.travel/countries/{{ id }}/ и выдергиваешь оттуда описание.

Id стран можно искать на странице http://www.ozon.travel/countries/ по регулярке:
<li><a href="(\d+)/">
Дальше уже ищешь полное описание и записываешь, допустим, для каждой страны в свой файл.

programming
01.12.2009, 17:05
Это всё само собой понятно. Проблема вытащить само описание, а точнее составить регулярку, которая подходила бы ко всем странам.

whexp
01.12.2009, 17:19
Ну смотри в исходнике страницы за что можно зацепиться. Перед самим контентом можно зацепиться за класс breadcrumb, после контента за класс футера.

b3
01.12.2009, 18:56
Спасибо. Разобрался как выдергивать такие вещи.
Появилась ещё большая проблема. Есть допустим http://www.ozon.travel/countries/1727/ и http://www.ozon.travel/countries/6675/ , а также остальные страны с http://www.ozon.travel/countries/.
Каким образом возможно выдернуть описание с этих страниц? То есть, чтобы шаблон рег выражения подходил ко всем страницам стран. Выдернуть нужно только основное описание, то есть перелёты и т.д. не нужно..
Возможно ли такое осуществить?


<?php
ini_set('max_execution_time','0');


get_countries_info('http://www.ozon.travel/countries/1727/');


function get_countries_info($url)
{
$fp = file_get_contents($url);
if(preg_match_all('#<p><strong>(.*): </strong>(.*)</p>#U', $fp, $m))
{
foreach ($m[0] as $str) {
echo strip_tags($str).'<br>';
}
}

if(preg_match_all('#</p><p><b>(.*)</b>(.*?)</p><h1>#', $fp, $m))
echo strip_tags($m[0][0]);

}

?>


Выводит:

Столица: Копенгаген (Copenhagen) Ольборг (Alborg), Оденсе (Odense).
Разница во времени: отстает на 2 часа
Денежная единица: Датская крона/DKK, 1 EUR = ~7.4 DKK
Виза: нужна Шенгенская виза, стоимость визы 40 EUR
Цена за ужин: 25 EUR
Чаевые: в Дании не принято давать чаевые
Аренда машины: от 70 EUR
Государственный язык: датский
Население: 5200000
Дания — это маленькая страна, имеющая красивую природу и богатую историю. Вот уже более тысячи лет Данией правят короли и королевы. Дания состоит из 406 островов и имеет береговую линию протяженностью 4 800 километров, состоящую из песчаных пляжей, омываемых чистой и прозрачной морской водой. Площадь страны — 43 093 кв.км, не включая Гренландию и Фарерские острова, которые пользуются внутренней автономией.


ЗЫ Функция выводит все в UTF-8 поетому если будеш использовать повставляй iconv() в нужных местах.

programming
01.12.2009, 19:53
Всё-таки то, что хочу я, наверное, невозможно реализовать..
В случае с Данией действительно вырывается всё отлично.
#</p><p><b>(.*)</b>(.*?)</p><h1># но что если в описании страны нет жирного шрифта?? В некоторых случаях он вообще не выдёргивает, в некоторых выдёргивает один абзац из нескольких, в котором есть жирный шрифт.
В общем бред с этой задачей..

b3
01.12.2009, 19:56
Как я заметил на всех страницах стиль оформления один, кинь мне несколько УРЛов где оформления разные, позже гляну.

programming
01.12.2009, 20:11
http://www.ozon.travel/countries/590/
http://www.ozon.travel/countries/605/

programming
02.12.2009, 19:53
В общем не могу придумать что делать с выдиранием описания..
А что если вырвать полное описание, а не первые абзацы? Например, на http://www.ozon.travel/countries/1032/ с Чем заняться путешественнику в Венгрии? Подлечиться-оздоровиться на термальных курортах, оценить далеко не бедную местную историческую «экскурсионку», а и до самого конца. Какую регулярку тогда составить?

Проблему уже сам решил.

SultanOFF
03.12.2009, 18:54
имеется html код
<p><h1>Заголовок</h1></p>
<p>описание</p>
<p>
нужно выдрать заголовок и описание! Делаю вот так
'</h1></p><p>(.*?)<\/p><p>'; нифига не работает! делаю в делфи

whexp
03.12.2009, 19:27
SultanOFF
Можешь выдирать отдельно или одной регуляркой.

По отдельности:
Заголовок - '<h1>(.*?)</h1>'
Описание - '</h1></p>\n<p>(.*?)</p>'
У тебя в регулярке для описания не хватает символа новой строки (eol).
Если одной регуляркой, то:
'<h1>(.*?)</h1></p>\n<p>(.*?)</p>'

SultanOFF
03.12.2009, 19:34
спасибо, теперь работает :)

programming
03.12.2009, 20:37
Есть переменная. В ней html код. Нужно выдрать из него все ссылки. Но текст ссылки оставить.
Как такое реализовать?

b3
03.12.2009, 21:19
Вопрос не ясен, как ето "выдрать", если нужны только ссылки, тоесть то что находится в href='' то вот регулярка
'#<a[^>]*? href="(.*?)"#'
Или тебе нужно preg_replace сделать, и удалить все что в href но оставив <a>ссылку</a> ?

programming
03.12.2009, 21:27
Вопрос не ясен, как ето "выдрать", если нужны только ссылки, тоесть то что находится в href='' то вот регулярка

Или тебе нужно preg_replace сделать, и удалить все что в href но оставив <a>ссылку</a> ?

Нужно просто убрать тег:
было: <a href="ссылка">Текст</a>
стало: Текст

krypt3r
03.12.2009, 21:54
strip_tags()

b3
03.12.2009, 21:56
<?php
$fp = file_get_contents('http://mail.ru/');
if(preg_match_all('#<a.*>(.*)</a>#',$fp, $matches))
{
foreach ($matches[1] as $link) {
echo $link.'<br>';
}
}
?>

programming
04.12.2009, 22:21
Нужно переменную полностью оставить, а только лишь удалить тег <a href..></a>
А с помощью strip_tags() можно удалить только тег ссылки, а все другие оставить?

whexp
04.12.2009, 23:54
Не знаю, как в PHP, но в Python это делается так:
import re
print re.sub('<a href=".+">(?P<text>.*?)</a>', '\g<text>', 'Hello, World! <a href="gasgasg">Text</a> HAHA!')
Получаем следующее:
Hello, World! Text HAHA!

DeluxeS
05.12.2009, 12:41
Есть список доменов, в файле.
Нужно зону домену в виде:
.com
.es

Таблица такая:

sdfsdf.com
sdfsdfff.com
loool.es
asdsdf.es

Нужно чтобы получилось:

sdfsdf.com .com
sdfsdfff.com .com
loool.es .es
asdsdf.es .es

Т.е. дописывать через несколько пробелов зону домена. Спасибо :)

whexp
05.12.2009, 13:48
Читаешь файл полностью, а затем заменяешь по ругулярке. У меня на Python получилось так:
import re
re.sub('(?P<domain>.*?)(?P<zone>\.\w+)\n', '\g<domain>\g<zone> \g<zone>\n', text)

Здесь <domain> - все что до .es, а <zone> - как раз .es.

Вполне вероятно, что можно сделать лучше :)

b3
05.12.2009, 14:49
Нужно переменную полностью оставить, а только лишь удалить тег <a href..></a>
А с помощью strip_tags() можно удалить только тег ссылки, а все другие оставить?

<?php
$str = '<a href="url" target="_blank" name="userurl">desc</a>';
echo preg_replace('#<a.*>(.*)</a>#','$1',$str);
?>

Насчет strip_tags()
можно удалить только тег ссылки, а все другие оставить?
Можно но наоборот, удалить все теги кроме тех которые в :
string strip_tags ( string $str [, string $allowable_tags ] )
$allowable_tags

Пример:

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>


Результат:
Test paragraph. Other text <p>Test paragraph.</p> <a href="#fragment">Other text</a>

ЗЫ вообще все ето можно найти на php.net

rushter
06.12.2009, 00:42
Имеються html файлы.

http://site.ru/hh-html.html
http://site.ru/zz-ggsdas.html
http://site.ru/zz-ggsdas.html

Как сделать ссылки вида:
http://site.ru/hh/html.html
http://site.ru/zz/html.html ?

whexp
06.12.2009, 01:21
rushter, это опечатался, или везде должно быть html.html? Если да, то вот на python:
import re
i = '''http://site.ru/hh-html.html
http://site.ru/zz-ggsdas.html
http://site.ru/zz-ggsdas.html'''
print re.sub('(?P<pre>\w{2})-.+\.html', '\g<pre>/html.html', i)

Результат:
http://site.ru/hh/html.html
http://site.ru/zz/html.html
http://site.ru/zz/html.html
Если все-же нужно получить такое же имя файла, то:
import re
i = '''http://site.ru/hh-html.html
http://site.ru/zz-ggsdas.html
http://site.ru/zz-ggsdas.html'''
print re.sub('(?P<pre>\w{2})-(?P<name>.+)\.html', '\g<pre>/\g<name>.html', i)

Результат:
http://site.ru/hh/html.html
http://site.ru/zz/ggsdas.html
http://site.ru/zz/ggsdas.html

А вообще это смотреть нужно. Например, если тебе нужно то же имя файла, что и было и при этом дефис больше нигде не встречается, то можно просто по тексту заменить:
print i.replace('-', '/')
И вот что выйдет:
http://site.ru/hh/html.html
http://site.ru/zz/ggsdas.html
http://site.ru/zz/ggsdas.html

rushter
06.12.2009, 02:22
rushter, это опечатался, или везде должно быть html.html? Если да, то вот на python:
import re
i = '''http://site.ru/hh-html.html
http://site.ru/zz-ggsdas.html
http://site.ru/zz-ggsdas.html'''
print re.sub('(?P<pre>\w{2})-.+\.html', '\g<pre>/html.html', i)

Результат:

Если все-же нужно получить такое же имя файла, то:
import re
i = '''http://site.ru/hh-html.html
http://site.ru/zz-ggsdas.html
http://site.ru/zz-ggsdas.html'''
print re.sub('(?P<pre>\w{2})-(?P<name>.+)\.html', '\g<pre>/\g<name>.html', i)

Результат:


А вообще это смотреть нужно. Например, если тебе нужно то же имя файла, что и было и при этом дефис больше нигде не встречается, то можно просто по тексту заменить:
print i.replace('-', '/')
И вот что выйдет:
Ну как бы регулярки я и сам могу составить,мне нужно правило для mod_rewrite.
ggsdas - динамическое.
У меня есть куча html файлов с такими именами,мне нужно сделать вид как будто они в папках.

krypt3r
06.12.2009, 02:53
rushter, из вашего поста не было ясно, что нужно помочь с правилом для mod_rewrite

RewriteRule ^(.+)/(.+)\.html$ $1-$2.html

programming
06.12.2009, 17:14
Как составить регулярку для выдирания названия и ссылки стран с http://www.ozon.travel/visas/ ?
Не понимаю за что зацепиться..

OnArs
06.12.2009, 17:27
Здравствуйте, ув. Античатовцы!



WP установлен в: /news/
Есть файл: page-1.html
Есть страница WP: /news/pages/page-1



Задача при запросе страницы page-1.html получать страницу /news/pages/page-1 с использованием ModRewrite (.htaccess).

В .htaccess файле пишу вот так:
RewriteEngine On
RewriteRule ^page-1.html$ /news/pages/page-1

В ответ при запросе страницы page-1.html получаю 404 страницу WP.

В чём проблема? Что делаю не так? :confused:


Заранее благодарен! ;)

whexp
06.12.2009, 18:25
programming, как-то так:
'<li><a href="(/visas/.*?)">(.*?)</a></li>'
А вообще лучше самому учиться :)

SQLHACK
06.12.2009, 18:33
Здравствуйте, ув. Нульдяне!
делай редирект не на страницу /news/pages/page-1
а на index.php?p=xxxxxxx где номер этой страницы, в твоем случае наверно это 1 поэтому будет

RewriteRule ^page-1.html$ /news/index.php?p=1

OnArs
06.12.2009, 18:56
делай редирект не на страницу /news/pages/page-1
а на index.php?p=xxxxxxx где номер этой страницы, в твоем случае наверно это 1 поэтому будет

RewriteRule ^page-1.html$ /news/index.php?p=1

У меня имено страница, а не запись в WP. Что в этом случае?

SQLHACK
06.12.2009, 21:08
У меня имено страница, а не запись в WP. Что в этом случае?

Есть файл: page-1.html
Есть страница WP: /news/pages/page-1

что я тут не верно понял , я так понял у тебя в папку news установлен wp, pages/page-1 такого урла нет в WP значит это рерайтный урл, но на рерайтный.
Ты делаешь редирект на рерайтную страницу, вот поэтому у тя и не работает , то есть у /news/pages/page-1 есть и другой адрес, значит и слать надо на него.

inlanger
08.12.2009, 21:10
Народ, подскажите, как удалить последний символ в строке, если он равен нулю?

b3
08.12.2009, 21:38
Народ, подскажите, как удалить последний символ в строке, если он равен нулю?

<?php
$str = '123eredjkgdg0';
if(substr($str,-1) == 0)
$str = substr($str,1,-1);

echo $str;
?>

inlanger
08.12.2009, 21:41
Мне бы регулярку. Причём для javascript )

astrologer
08.12.2009, 21:47
Мне бы регулярку. Причём для javascript )/0$/
alert('1230'.replace(/0$/, ''));

rushter
12.12.2009, 18:55
Хочу удалить строки длина которых меньше 10 строк.
re.sub - замена по рег. выражению.
re.sub('\n.{1,10}\n')',"\n",self.text)
Что не так ?

LStr1ke
12.12.2009, 19:11
Так не?

strlen($string) <= 10 ? $string = '' : '' ;

rushter
12.12.2009, 19:17
Нет.Под строкой тут понимается одна большая строка и в ней подстроки разделенные переводом строки(\n).Ну т.е обычный текстовый файл со строками в нём.

LStr1ke
12.12.2009, 19:36
Нет.Под строкой тут понимается одна большая строка и в ней подстроки разделенные переводом строки(\n).Ну т.е обычный текстовый файл со строками в нём.
Ну так открывай файл через file(); в цикле каждую строку проверяй условием, кот. я привел.
Например:

<?php
$file_arr = file("text.txt");
foreach($file_arr as $line) {
strlen($line) <= 10 ? $line = '' : '' ;
echo $line."<br>";
}
?>

Скрипт выведет текстовый файл исключая сроки меньше или равные 10 симвалам.
в условии можно переделать на проверку условием и записем в файл, тоесть запишется новый файл, где не будет "маленьких" строк.
Возможно есть и более практичный вариант.

PS. Написал на скорую руку, нужно доделать до нормального вывода и вырезания "строки"

rushter
12.12.2009, 20:27
Ну так открывай файл через file(); в цикле каждую строку проверяй условием, кот. я привел.
Например:

<?php
$file_arr = file("text.txt");
foreach($file_arr as $line) {
strlen($line) <= 10 ? $line = '' : '' ;
echo $line."<br>";
}
?>

Скрипт выведет текстовый файл исключая сроки меньше или равные 10 симвалам.
в условии можно переделать на проверку условием и записем в файл, тоесть запишется новый файл, где не будет "маленьких" строк.
Возможно есть и более практичный вариант.

PS. Написал на скорую руку, нужно доделать до нормального вывода и вырезания "строки"
Твой код очень долго будет обрабатывать текст,регулярка будет работать как минимум в 5 раз быстрее.Разбивать фаил весов 15мб и потом его обходить foreach не есть хорошо.

b3
12.12.2009, 21:01
Вообще с трудом понял суть проблемы, а что если считать файл побайтово в переменную, далее переменную разбить на Строки
$strings = explode("\r\n", $file);
Далее сделать поиск в кадом ключе $strings[0], [1], [2]... искать кол-во символов "\n" если оно меньше 10, то делать unset($strings[$key]);
Потом склеиваем оставшиеся ключи и перезаписываем файл.

Надеюсь правильно понял суть вопроса =)

rushter
12.12.2009, 21:11
Как раз таки нет :)
Что имеем:

Не знаю.
Может быть, это еще хуже.
О чем это вы? встревожился Олег.
Просто я подумала, что лучше, сразу отнять жизнь у зверя или взять его беспомощного, сонного в плен и отнять свободу? Обречь всю жизнь сидеть в тесной клетке.
Ошибаетесь! торжествуя воскликнул Олег.
Если мы лишаем зверей свободы, то очень ненадолго: лишь на столько времени, чтобы успеть перевезти их в заранее намеченные места.
И там сейчас же возвращаем им свободу.
Наша цель акклиматизация и приручение полезных и красивых животных.
Мы развезем их по всем местам, где многие из них давно уже выбиты, а другие никогда не жили, но где подходящие для них условия жизни: климат, ландшафт, корма.
Из поколения в поколение мы будем переделывать их, у мирных зверей будем уничтожать древний страх перед человеком.
Вы только вообразите себе, Зенита, милая, стадо красавцев-оленей, пасущееся где-нибудь на Валдае или в Комарово под самым Ленинградом! Безбоязненно подбегает к вам этакий горный рогач, идет, чтобы вы его угостили из своих рук кусочком сахара, ласково потрепали по холке.
Олег! прервала его Зенита.
Знаете что, Олег? Вы не можете.
это.
ну.
С помощью регулярки нужно удалить эти строки.В конце каждой стоки стоит \n.Поидее в этих строках между \n и \n меньше 10 символов.
re.sub - замена по рег. выражению.
re.sub('\n.{1,10}\n')',"\n",self.text)
Другие виды переноса строки зарание убраны(\r\n).

Pashkela
12.12.2009, 21:30
чото хитромудрая надуманность какая-то, вот так вот и пох на размеры файла:


<?php
$a = fopen('123.txt','r');
while (!feof($a)) {
$b = trim(fgets($a));
if (strlen($b)>10) echo $b . "<br>";
}
?>


Причем здесь регулярки - искренне не понял. Или залей куда-нибудь пример такого файла

rushter
12.12.2009, 21:33
При том что в моём коде,в данном месте легче,удобне и быстрее использовать рег.выражение.И не спрашивай почему.

Pashkela
12.12.2009, 21:36
Бред, имхо

PS: Сорри, но правда бред

ни одна регулярка не будет работать быстрее while и strlen, имхо в квадрате

Тем более с большим файлом

rushter
12.12.2009, 21:42
Бред, имхо

PS: Сорри, но правда бред

ни одна регулярка не будет работать быстрее while и strlen, имхо в квадрате
При том что в моём коде,в данном месте легче,удобне и быстрее использовать рег.выражение.И не спрашивай почему.
Я прекрасно знаю что и где быстрее,скорость я замерял специально.+ ко всему файла с данным контентом для обработки нет,сам текст появляется после некой генерации и обработки текста.+ эту регулярку я смогу просто добавить к другой которая уже много другого ищет и заменяет на \n.

Pashkela
12.12.2009, 21:56
понял, может это наведет на подсказку:


<?php
$a = fopen('123.txt','r');
while (!feof($a)) {
$b = trim(fgets($a));
if (preg_match('#.{10}#',$b)) echo $b . "<br>";
}
?>


где в 123.txt - твой текст

LStr1ke
12.12.2009, 21:57
$string = "\n".$string."\n";
$out = preg_replace("#\n(.{1,10})\n#","\n",$string);
echo $out;

PaCo
12.12.2009, 21:57
Хочу удалить строки длина которых меньше 10 строк.
re.sub - замена по рег. выражению.
re.sub('\n.{1,10}\n')',"\n",self.text)
Что не так ?
Не знаю но как в путоне с кавычками - '\n' и "\n" разные вещи или нет? Или в regexp это учитывается?

LStr1ke
12.12.2009, 21:59
Не знаю но как в путоне с кавычками - '\n' и "\n" разные вещи или нет? Или в regexp это учитывается?
'\n' - строка \n
"\n" - перенос строки
а в шаблоне если ищещь строку \n, то экранируешь ее. /\n

rushter
12.12.2009, 22:00
$string = "\n".$string."\n";
$out = preg_replace("#\n(.{1,10})\n#","\n",$string);
echo $out;

Вот часть текста,спрашивалось зачем заново писать мою регулярку на другом языке ?
Сохраняйте в unix формате.
<?php
$string = ".
Как в сказке! задумчиво сказала Зенита, с трудом заставив себя отойти от клетки.
Но мне пора домой.
По дороге вы всё объясните мне? Правда? Конечно! С удовольствием! заторопился юноша, всё это время деликатно молчавший.
Он взял ее под руку, и товарищи ее по экспедиции, видевшие, как они шли по улице, решили, что она встретила здесь своего старого друга, так просто и хорошо они разговаривали.
Объяснение это было недлинно.
Всё дело.
начал юноша.
Простите, перебила Зенита.
А как вас зовут? Почти как вашего оленя: Олешком.
Или, если всерьез, Олегом.";
$out = preg_replace("#\n(.{1,20})\n#","\n",$string);
echo $out;
?>

PaCo
12.12.2009, 22:04
'\n' - строка \n
"\n" - перенос строки
а в шаблоне если ищещь строку \n, то экранируешь ее. /\n
спасибо конечно но я не про php и это как бы подсказка rushter.

LStr1ke
12.12.2009, 22:04
rushter
Я не пойму, тогда в чем проблема? Если твоя регулярка работает, то к чему тема?
Твоя регулярка ищет количество имволов между "\n" и "\n", если и работает, то. Первую строку он не распознает, т.к. она начальная и перед нею нету знака переноса строки, что соответсвенно и с конечной строкой.

rushter
12.12.2009, 22:09
rushter
Я не пойму, тогда в чем проблема? Если твоя регулярка работает, то к чему тема?
Твоя регулярка ищет количество имволов между "\n" и "\n", если и работает, то. Первую строку он не распознает, т.к. она начальная и перед нею нету знака переноса строки, что соответсвенно и с конечной строкой.

.
Как в сказке! задумчиво сказала Зенита, с трудом заставив себя отойти от клетки.
По дороге вы всё объясните мне? Правда? Конечно! С удовольствием! заторопился юноша, всё это время деликатно молчавший.
Он взял ее под руку, и товарищи ее по экспедиции, видевшие, как они шли по улице, решили, что она встретила здесь своего старого друга, так просто и хорошо они разговаривали.
Всё дело.
Простите, перебила Зенита.
А как вас зовут? Почти как вашего оленя: Олешком.
Или, если всерьез, Олегом.

Всё дело. разве больше 30 ?
Скорее это особенность замены по рег.выражению т.к следующая строка после "Все дело тоже" меньше 30.

LStr1ke
12.12.2009, 22:19
разве больше 20 ?
хммм =\
Вообщем такая тема, если было 2 строки меньше 20 символов одна - за другой, то вырезается только одна. Видимо замена на \n мешает сразу вырезать сл. строку.
Тоесть если между этими строками вставить еще одну больше 20 символов, то в один раз все вырезается.
Например:

$out = preg_replace("#\n(.{1,20})\n#","\n",$string);
$out = preg_replace("#\n(.{1,20})\n#","\n",$out);

Успешно вырежет оставшуюся (забытую) строку.

Но если их будет больше 2х подряд, то проблема. Вообщем нужен или цикл, каждый раз проверя еслть ли там строки меньше 20 символов, либо думать над шаблоном

rushter
12.12.2009, 22:20
Я написал про это в своём посте.Вопрос закрыт.

foxxx1234
13.12.2009, 03:09
Location: /id12345677
Подскажите как написать чтобы выводились только цифры

Pashkela
13.12.2009, 03:13
<?php
$a = "Location: /id12345677";
preg_match('#\d+#',$a,$res);
echo $res[0];
?>

foxxx1234
13.12.2009, 03:18
Спасибо большое.

foxxx1234
14.12.2009, 15:22
Что то не получается вытащить цифры после Location: /id
HTTP/1.1 302 Found
Server: nginx/0.7.59
Date: Mon, 14 Dec 2009 11:17:46 GMT
Content-Type: text/html; charset=windows-1251
Connection: close
X-Powered-By: PHP/5.2.6-1+lenny3
Pragma: no-cache
Cache-control: no-store
Set-Cookie: remixchk=5; expires=Thu, 09-Dec-2010 05:38:21 GMT; path=/; domain=.vkontakte.ru
Set-Cookie: remixsid=c54f572c56461cef2bc77daf110a3a2c16bc62f49 f31bb800bf161a; expires=Thu, 09-Dec-2010 10:36:40 GMT; path=/; domain=.vkontakte.ru
Location: /id12345678
Vary: Accept-Encoding
Content-Length: 0

HTTP/1.1 200 OK
Server: nginx/0.7.59
Date: Mon, 14 Dec 2009 11:17:50 GMT
Content-Type: text/html; charset=windows-1251
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.6-1+lenny3
Pragma: no-cache
Cache-control: no-store
Vary: Accept-Encoding

Подскажите кто может.

whexp
14.12.2009, 15:29
foxxx1234,
Location: /id(\d+)\n

krypt3r
14.12.2009, 16:06
preg_match ('#Location:\s+/id(\d+)\r\n#', $str, $m);
echo $m[1];

alwex
14.12.2009, 20:25
у меня есть текст <a href="" class="tracknews">*ТЕКСТ*</a> и надо заменивать что бы остался только *ТЕКСТ*, сам шаблон статический кроме слова *ТЕКСТ*. я написал регулярку только она его не хочет доставать:

$txt = preg_replace('#<a href="" class="tracknews">.+?</a>#si', '\\1', $txt);

b3
14.12.2009, 20:46
у меня есть текст <a href="" class="tracknews">*ТЕКСТ*</a> и надо заменивать что бы остался только *ТЕКСТ*, сам шаблон статический кроме слова *ТЕКСТ*. я написал регулярку только она его не хочет доставать:

$txt = preg_replace('#<a href="" class="tracknews">.+?</a>#si', '\\1', $txt);


<?php
$txt = '<a href="" class="tracknews">*ТЕКСТ*</a>';
$txt = preg_replace('#<a href="" class="tracknews">(.*)</a>#','$1',$txt);
echo $txt;
?>

alwex
14.12.2009, 21:02
не то, оставляет </a>

alwex
14.12.2009, 21:08
все, я сам разобрался

alwex
16.12.2009, 22:20
здравствуйте ещё раз, писал я регулярку и никак не могу её сделать рабочей

есть текст

<tr><td class="type">премьера (мир)</td><td class="calendar"><a href="/level/80/film/279221/">14 ноября 2009</a></td></tr>

<tr><td class="type">премьера (РФ)</td><td class="calendar"> <a class='all' href='/level/8/view/prem/year/2009/#279221'>19 ноября 2009</a>,&nbsp;<a href='/level/10/m_act[company]/4/' class='all'>&laquo;Парадиз&raquo;</a></td></tr>


вот как я сделал


$search = '#<tr><td class="type">премьера (РФ)</td><td class="calendar">(.*)</td></tr>#';
$search = '#<tr><td class="type">премьера (мир)</td><td class="calendar">(.*)</td></tr>#';


но они не пашут

Gifts
16.12.2009, 22:24
alwex preg_match('~<tr><td class="type">премьера \(РФ\)</td><td class="calendar">(.*?)</td></tr>~i',$in,$out);
Для любителей копировать не думая - придумали функцию preg_quote.

alwex
16.12.2009, 22:37
спасибо)

OnArs
19.12.2009, 14:27
Здравствуйте! :rolleyes:


На странице есть вот такой текст:
function contact() {
popup("/JobSearch/JobContactDetails.aspx?JobId=45821542&JobTitle=Credit+Controller&Email=davidjarvis%40morgan-harvey.co.uk&Ref=DJ223&Tel=0844+811+0473&Fax=&Company=Morgan+Harvey&Contact=David+Jarvis&Address=&ExternalURL=", "ContactDetails", 470, 350);
}

Как с помощью регулярного выржаения выпарсить нужные мне:

JobId
JobTitle
Email
Ref
Tel
Fax
Company
Contact
Address
ExternalURL


Т.е. все GET параметры передаваемые на страницу.


Заранее благодарен! :confused:

whexp
19.12.2009, 15:21
OnArs. А тебе даже не обязательно парсить. Можешь просто получить строку с парамтрами и разбирать ее функцией split (или ее аналогом, но в большинстве языков она есть). тоесть сплитишь по символу "&", в итоге у тебя будет список вида ["имя=значение", "имя=значение"] и каждый элемент списка ты можешь так же сплитить на знаке "=". ну можно и по регулярке. тут все предельно просто. возьмем, к примеру JobId:
JobId=(.*?)&
И так все, что тебе нужно. Ну у последнего контрольный символ в конце будет не &, а двойные ковычки ".

zythar
19.12.2009, 21:54
есть строка вида:
{aaa.bbb} {aaa.vvv} etc
в одной строке может быть произвольное количество выражения.
нужно взять то, что после точки.
пробовал preg_match_all('/{aaa\.(.*)}/', строка, куда_нужно_записать). не получается.

ps что интересно: если строка (да да, именно строка. ОДНА строка) будет такого вида:
{aaa.bbb}
{aaa.vvv}
etc,

то выражение после точки нормально записывается в массив.

whexp
19.12.2009, 22:07
zythar,
int preg_match_all ( string $pattern , string $subject , array &$matches [, int $flags [, int $offset ]] )
<?php
$i = "{aaa.bbb} {aaa.vvv}";
preg_match_all("/{aaa\.(.*?)}/", $i, $q);
print_r($q);
?>
whexp@localhost:~/dev$ php5 regex.php
Array
(
[0] => Array
(
[0] => {aaa.bbb}
[1] => {aaa.vvv}
)

[1] => Array
(
[0] => bbb
[1] => vvv
)

)

zythar
19.12.2009, 22:21
гм.. да, заработало, домо.
если не трудно: чем отличается (.*?) от (.*)?

просто времени нет искать, сорьте

whexp
19.12.2009, 22:27
zythar, http://ru.wikipedia.org/wiki/Regex >> # 3.3.1 Жадная и ленивая квантификация

Byrger
19.12.2009, 22:30
RewriteEngine On
RewriteBase /


RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{REQUEST_URI} !^/js/
RewriteCond %{REQUEST_URI} !^/css/
RewriteCond %{REQUEST_URI} !^/images/

RewriteRule ^(.[a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.+)/?$ index.php?action=$1&act=$2
RewriteRule ^([^.]+)$ /index.php

Про обращении к картинке /images/grade/b_grade.png открывается Index.php

в чем ошибка?

zythar
19.12.2009, 22:36
zythar, http://ru.wikipedia.org/wiki/Regex >> # 3.3.1 Жадная и ленивая квантификация

домо (*

Naydav
21.12.2009, 19:39
Подскажите регулярку для следующей задачи
Подходит любое слово, состоящие из букв и цифр, кроме слова admin

'/site/test123' - подходит
'/site/admin' - НЕ подходит

Что-то типа
'site/([\w\d^admin]+)'

Спасибо

LStr1ke
21.12.2009, 19:45
"/^admin/i"

Naydav
21.12.2009, 19:49
LStr1ke
"/^admin/i"
Но мне нужны только слова и цифры (\w\d)
В данном случае регулярка будет пропускать все ( и _,?* и т.д.)

programming
22.12.2009, 17:32
Есть переменная, в которой лежит множество url'ов.
Например,
http://ya.ru/hhgyugyy/llkkk.pkloij/.kkkko
http://jjfurh.com/efef/po.,ki
http://hhgfyr.info/?kjtit=poklojk

Какой регуляркой можно выдернуть домены?
То есть должен на выходе получиться массив:
http://ya.ru/
http://jjfurh.com/
http://hhgfyr.info/

Думал сделать такой регуляркой, но она вырывает до последней косой черты, а нужно до первой:
preg_match_all('/http:\/\/(.*)\//',$links, $regs);

Спасибо.

Pashkela
22.12.2009, 17:42
<pre>
<?php
$a = '
http://ya.ru/hhgyugyy/llkkk.pkloij/.kkkko
http://ya1.ru/efef/po.,ki
http://ya2.ru/kjtit=poklojk';
preg_match_all('/(http:\/\/?[^\/]+\/)/i',$a,$b);
print_r ($b[1]);
?>
</pre>

programming
22.12.2009, 17:50
<pre>
<?php
$a = '
http://ya.ru/hhgyugyy/llkkk.pkloij/.kkkko
http://ya1.ru/efef/po.,ki
http://ya2.ru/kjtit=poklojk';
preg_match_all('/(http:\/\/?[^\/]+\/)/i',$a,$b);
print_r ($b[1]);
?>
</pre>

Большое спасибо.

Naydav
23.12.2009, 21:24
Подскажите регулярку для следующей задачи
Подходит любое слово, состоящие из букв и цифр(ТОЛЬКО ИЗ БУКВ И ЦИФР), кроме слова admin

'/site/test123' - подходит
'/site/admin' - НЕ подходит
'/site/neadmi1n"&(*&)*_ ""1' - НЕ подходит

Что-то типа
'site/([\w\d^admin]+)'

Спасибо

b3
23.12.2009, 22:09
<?php
$str = '/site/admin1';
if(preg_match('#$/site/admin^#i',$str))
echo 'NO';
else echo 'OK';
?>

Naydav
23.12.2009, 23:47
<?php
$str = '/site/admin1';
if(preg_match('#$/site/admin^#i',$str))
echo 'NO';
else echo 'OK';
?>


Такое решение уже давали
Читаем внимательно условие
Подходит любое слово, состоящие из букв и цифр

Это решение пропускает также и спец символы
например
$str = '/site/NEadmin"&(*&)*_ ""1';

LStr1ke
24.12.2009, 00:20
А не легче ставить проверку на присутствие слова "admin". Если присутвует, то ругаемся, нет - выполняем нужные действия.

m0Hze
24.12.2009, 00:20
if(preg_match('#(admin|[\@\%\^\&\*\_])#i',$_GET['sec'])){
echo 'No';
}else{
echo 'ok!';
}

Извращеная регулярка на ночь гредующую.Но что удивительно,это работает! оО

Naydav
24.12.2009, 12:30
LStr1ke
А не легче ставить проверку на присутствие слова "admin". Если присутвует, то ругаемся, нет - выполняем нужные действия.
Это нужно для Zend_Controller_Router_Route_Regex, так что без изврата не получится

m0Hze
Извращеная регулярка на ночь гредующую.Но что удивительно,это работает! оО

Оо это же гениально просто!!! перечислить запрещенные символы в том числе и слово admin
Блин, потом зная решение, только и остается гадать, почему нужно было придумывать сложные варианты
Спасибо!

programming
27.12.2009, 14:30
Есть переменная, в которой содержится фрагмент кода:
<p>

<b>Код счётчика</b><br><textarea rows=22 cols=90>&lt;!--Rating@Mail.ru counter--&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
d=document;var a='';a+=';r='+escape(d.referrer);js=10;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.1&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
a+=';j='+navigator.javaEnabled();js=11;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.2&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
s=screen;a+=';s='+s.width+'*'+s.height;
a+=';d='+(s.colorDepth?s.colorDepth:s.pixelDepth); js=12;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.3&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
js=13;//--&gt;&lt;/script&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
d.write('&lt;a href=&quot;http://top.mail.ru/jump?from=1760535&quot; target=&quot;_top&quot;&gt;'+
'&lt;img src=&quot;http://dd.cd.ba.a1.top.mail.ru/counter?id=1760535;t=130;js='+js+
a+';rand='+Math.random()+'&quot; alt=&quot;Рейтинг@Mail.ru&quot; border=&quot;0&quot; '+
'height=&quot;40&quot; width=&quot;88&quot;&gt;&lt;\/a&gt;');if(11&lt;js)d.write('&lt;'+'!-- ');//--&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a target=&quot;_top&quot; href=&quot;http://top.mail.ru/jump?from=1760535&quot;&gt;
&lt;img src=&quot;http://dd.cd.ba.a1.top.mail.ru/counter?js=na;id=1760535;t=130&quot;
height=&quot;40&quot; width=&quot;88&quot; border=&quot;0&quot; alt=&quot;Рейтинг@Mail.ru&quot;&gt;&lt;/a&gt;&lt;/noscript&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
if(11&lt;js)d.write('--'+'&gt;');//--&gt;&lt;/script&gt;
&lt;!--// Rating@Mail.ru counter--&gt;
</textarea>

Какой регуляркой можно выдрать код счётчика?
Спасибо.

b3
27.12.2009, 15:10
Отредактируй пост, и на будущее будь добр оформляй код в тэгах [*php]*[*/php]

programming
27.12.2009, 17:01
Отредактируй пост, и на будущее будь добр оформляй код в тэгах [*php]*[*/php]
Ок.



Пробовал /<textarea rows=22 cols=90>(.*)<\\/textarea>/
Но получается пустота..
Как же выдрать код?

b3
27.12.2009, 18:41
<?php
$var = "<p>

<b>Код счётчика</b><br><textarea rows=22 cols=90>&lt;!--Rating@Mail.ru counter--&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
d=document;var a='';a+=';r='+escape(d.referrer);js=10;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.1&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
a+=';j='+navigator.javaEnabled();js=11;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.2&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
s=screen;a+=';s='+s.width+'*'+s.height;
a+=';d='+(s.colorDepth?s.colorDepth:s.pixelDepth); js=12;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.3&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
js=13;//--&gt;&lt;/script&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
d.write('&lt;a href=&quot;http://top.mail.ru/jump?from=1760535&quot; target=&quot;_top&quot;&gt;'+
'&lt;img src=&quot;http://dd.cd.ba.a1.top.mail.ru/counter?id=1760535;t=130;js='+js+
a+';rand='+Math.random()+'&quot; alt=&quot;Рейтинг@Mail.ru&quot; border=&quot;0&quot; '+
'height=&quot;40&quot; width=&quot;88&quot;&gt;&lt;\/a&gt;');if(11&lt;js)d.write('&lt;'+'!-- ');//--&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a target=&quot;_top&quot; href=&quot;http://top.mail.ru/jump?from=1760535&quot;&gt;
&lt;img src=&quot;http://dd.cd.ba.a1.top.mail.ru/counter?js=na;id=1760535;t=130&quot;
height=&quot;40&quot; width=&quot;88&quot; border=&quot;0&quot; alt=&quot;Рейтинг@Mail.ru&quot;&gt;&lt;/a&gt;&lt;/noscript&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
if(11&lt;js)d.write('--'+'&gt;');//--&gt;&lt;/script&gt;
&lt;!--// Rating@Mail.ru counter--&gt;
</textarea> ";

preg_match('#<textarea .*>(.*)</textarea>#s',$var, $m);
echo $m[1];
?>

programming
27.12.2009, 19:02
Не пашет=(

PandoraBox
27.12.2009, 20:25
Ок.



Пробовал /<textarea rows=22 cols=90>(.*)<\\/textarea>/
Но получается пустота..
Как же выдрать код?

$tmp = <<<TMP
<p>

<b>Код счётчика</b><br><textarea rows=22 cols=90>&lt;!--Rating@Mail.ru counter--&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
d=document;var a='';a+=';r='+escape(d.referrer);js=10;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.1&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
a+=';j='+navigator.javaEnabled();js=11;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.2&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
s=screen;a+=';s='+s.width+'*'+s.height;
a+=';d='+(s.colorDepth?s.colorDepth:s.pixelDepth); js=12;//--&gt;&lt;/script&gt;
&lt;script language=&quot;javascript1.3&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
js=13;//--&gt;&lt;/script&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
d.write('&lt;a href=&quot;http://top.mail.ru/jump?from=1760535&quot; target=&quot;_top&quot;&gt;'+
'&lt;img src=&quot;http://dd.cd.ba.a1.top.mail.ru/counter?id=1760535;t=130;js='+js+
a+';rand='+Math.random()+'&quot; alt=&quot;Рейтинг@Mail.ru&quot; border=&quot;0&quot; '+
'height=&quot;40&quot; width=&quot;88&quot;&gt;&lt;\/a&gt;');if(11&lt;js)d.write('&lt;'+'!-- ');//--&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a target=&quot;_top&quot; href=&quot;http://top.mail.ru/jump?from=1760535&quot;&gt;
&lt;img src=&quot;http://dd.cd.ba.a1.top.mail.ru/counter?js=na;id=1760535;t=130&quot;
height=&quot;40&quot; width=&quot;88&quot; border=&quot;0&quot; alt=&quot;Рейтинг@Mail.ru&quot;&gt;&lt;/a&gt;&lt;/noscript&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;&lt;!--
if(11&lt;js)d.write('--'+'&gt;');//--&gt;&lt;/script&gt;
&lt;!--// Rating@Mail.ru counter--&gt;
</textarea>
TMP;
// -----------------------------------------------------
$tmp = html_entity_decode($tmp);
flush(); // Buffer clean
if (preg_match("/<textarea rows=22 cols=90>(.*)<\/textarea>/is", $tmp, $match ))//
{
print_r($match[1]);
}

с тебя пиво :D

b3
27.12.2009, 20:28
Не пашет=(
У меня работает у тебя нет, мистика? Или на форуме вылажуем одно в имеем другое?

programming
31.12.2009, 20:55
Pandorra, спасибо.

Ещё проблема..
Вот html страница:
<a class="normal s" href="/Pill?q=179309">Код счетчика</a>
Как вырвать 179309?
Спасибо.

С наступающим НГ))

warlok
01.01.2010, 01:27
$a = '<a class="normals" href="/Pill?q=179309">Код счетчика</a>';
preg_match('#<a class=\"normals\" href=\"/Pill\?q=(.*?)\">#',$a,$out);
var_dump($out);

С новым годом (:

Vlad&slav
01.01.2010, 03:18
<a href="http://www.batareika.info/index.php?do=register&amp;doaction=validating&amp;id=ZXhwb G9kZXJ8fGV4MDAwQG1haWwucnV8fGFjYmQ4MTBhM2M5ZmU0Zjc yZDQ5NThkMDA1M2VmMzRkfHw4MTAwZWU5NDM3NzU3YjJiYTRkN 2E4YzY2YjM0Y2FhZQ%3D%3D" target="_blank">


Подскажите регулярку (php) чтобы вытянуть адрес

krypt3r
01.01.2010, 11:38
Самый простой вариант #<a.?+href="([^"]+)".*?>#

b3
02.01.2010, 03:49
и еще так
#<a[^>]*? href="(.*?)"#

Vlad&slav
02.01.2010, 12:16
Благодарю

InfectedM
05.01.2010, 00:49
нужно выдрать значение всех value из этой формы.Напишите плиз регулярку


<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LBD_VCT" id="__LBD_VCT" value="11" />
<input type="hidden" name="__LBD_SGC_login_ctl00_cph_captcha" id="__LBD_SGC_login_ctl00_cph_captcha" value="0" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE5MDIzMzgzMz1ZBYCZg9kFgICA3w9kFgZmD2QWAmY PFgIeC18hSXRlbUNvdW50AgMWBgIBD2QWAmYPFQEiPG5vYnI+P HNwYW4+0JLRhdC+0LQ8L3NwYW4+PC9ub2JyP11CAw9kFgJmDxU BTDxub2JyPjxhIGhyZWY9J3NpZ251cC5hc3B4JyB0YXJnZXQ9J 19zZWxmJz7QoNC10LPQuNGB0YLRgNCw0YbQuNGPPC9hPjwvbm9 icj5kAgUPZBYCZg8VAUk8bm9icj48YSBocmVmPSdhYm91dC5hc 3B4JyB0YXJnZXQ9J19zZWxmJz7QmNC90YTQvtGA0LzQsNGG0Lj RjzwvYT48L25vYnI+ZAIDD2QWCgIEDxBkZBYBZmQCFA8PFgIeB 0VuYWJsZWRoZGQCGw8PFgIeCFJlYWRPbmx5aGRkAh0PDxYCHwF oZGQCHg8PFgIfAWhkZAIFDw8WAh4JU2hvcnRMaXN0Z2QWBGYPF gIfAAIDFgZmD2QWBGYPDxYCHgRUZXh0BQ7QoNGD0YHRgdC60Lj QuWRkAgEPDxYGHgtDb21tYW5kTmFtZQUCcnUfBAUO0KDRg9GB0 YHQutC40LkeB1Zpc2libGVoZGQCAg9kFgRmDw8WBB8EBQdFbmd saXNoHwZoZGQCAQ8PFgQfBQUCZW4fBAUHRW5nbGlzaGRkAgQPZ BYEZg8PFgQfBAUHRGV1dHNjaB8GaGRkAgEPDxYEHwUFAmRlHwQ FB0RldXRzY2hkZAICDxBkZBYAZGRAv5Ju3oqH7kjKpWuXz49wG vbN0A==" />
</div>

Gifts
05.01.2010, 01:54
InfectedM
$text = " <input type=\"hidden\" name=\"__LASTFOCUS\" id=\"__LASTFOCUS\" value=\"\" />
<input type=\"hidden\" name=\"__EVENTTARGET\" id=\"__EVENTTARGET\" value=\"\" />
<input type=\"hidden\" name=\"__EVENTARGUMENT\" id=\"__EVENTARGUMENT\" value=\"\" />
<input type=\"hidden\" name=\"__LBD_VCT\" id=\"__LBD_VCT\" value=\"11\" />
<input type=\"hidden\" name=\"__LBD_SGC_login_ctl00_cph_captcha\" id=\"__LBD_SGC_login_ctl00_cph_captcha\" value=\"0\" />
<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"/wEPDwULLTE5MDIzMzgzMz1ZBYCZg9kFgICA3w9kFgZmD2QWAmY PFgIeC18hSXRlbUNvdW50AgMWBgIBD2QWAmYPFQEiPG5vYnI+P HNwYW4+0JLRhdC+0LQ8L3NwYW4+PC9ub2JyP11CAw9kFgJmDxU BTDxub2JyPjxhIGhyZWY9J3NpZ251cC5hc3B4JyB0YXJnZXQ9J 19zZWxmJz7QoNC10LPQuNGB0YLRgNCw0YbQuNGPPC9hPjwvbm9 icj5kAgUPZBYCZg8VAUk8bm9icj48YSBocmVmPSdhYm91dC5hc 3B4JyB0YXJnZXQ9J19zZWxmJz7QmNC90YTQvtGA0LzQsNGG0Lj RjzwvYT48L25vYnI+ZAIDD2QWCgIEDxBkZBYBZmQCFA8PFgIeB 0VuYWJsZWRoZGQCGw8PFgIeCFJlYWRPbmx5aGRkAh0PDxYCHwF oZGQCHg8PFgIfAWhkZAIFDw8WAh4JU2hvcnRMaXN0Z2QWBGYPF gIfAAIDFgZmD2QWBGYPDxYCHgRUZXh0BQ7QoNGD0YHRgdC60Lj QuWRkAgEPDxYGHgtDb21tYW5kTmFtZQUCcnUfBAUO0KDRg9GB0 YHQutC40LkeB1Zpc2libGVoZGQCAg9kFgRmDw8WBB8EBQdFbmd saXNoHwZoZGQCAQ8PFgQfBQUCZW4fBAUHRW5nbGlzaGRkAgQPZ BYEZg8PFgQfBAUHRGV1dHNjaB8GaGRkAgEPDxYEHwUFAmRlHwQ FB0RldXRzY2hkZAICDxBkZBYAZGRAv5Ju3oqH7kjKpWuXz49wG vbN0A==\" />
";

preg_match_all('#<input[^<>]*name=([\'"])(?P<name>[^<>]*?)\1([^<>]*value=([\'"])(?P<value>[^<>\4]*?)\4)?#i',$text,$result);
$out = array_combine($result['name'],$result['value']);

var_dump($out);

InfectedM
05.01.2010, 22:05
Gifts спасибо

Komyak
05.01.2010, 22:29
Подскажите пожалуйста:

<script>print_email('mail','yandex.ru');</script>

//Пытаюсь выдрать mail и yandex.ru

|>print_email(\'(.*?)\',\'(.*?)\')|Uis //c помощью вот этого...



Страшно, ужасно и ничего не получается...

krypt3r
06.01.2010, 00:14
|>print_email\(\'(.+?)\',\s*\'(.+?)\'\);|

Круглые скобки экранировать следует

Komyak
06.01.2010, 09:07
Круглые скобки экранировать следует

http://pyha.ru/fishki/regexp/

Совпадений не найдено.

Может ещё какие варианты?

#Wolf#
06.01.2010, 09:14
http://pyha.ru/fishki/regexp/

Совпадений не найдено.

Может ещё какие варианты?
#print_email\('(.*?)','(.*?)'\);#is
=>

Array
(
[0] => Array
(
[0] => print_email('mail','yandex.ru');
)

[1] => Array
(
[0] => mail
)

[2] => Array
(
[0] => yandex.ru
)

)

Komyak
06.01.2010, 10:22
Работает! Спасибо! Я проверял на пыхе- он выдаёт ошибку. Проверил на локалке всё работает х.з. в чём дело.

#Wolf#
06.01.2010, 17:57
Работает! Спасибо! Я проверял на пыхе- он выдаёт ошибку. Проверил на локалке всё работает х.з. в чём дело.
экстросенсы в отпуске =\
попробуй закоменить кавычки и запятые
-----------------------------------------------
теперь я спрошу


<Files .htaccess>
Order deny,allow
Deny from all
</Files>

<IfModule mod_php4.c>
php_value session.use_trans_sid 0
</IfModule>

<IfModule mod_deflate.c>
<FilesMatch "\.(js|css)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

AddDefaultCharset utf-8
Options +FollowSymLinks
Options -Indexes

RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*) $1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?category=$1 [L]
RewriteCond %{HTTP_HOST} ^www\.host\.co\.cc$ [NC]
RewriteRule ^(.*)$ http://host.co.cc/$1 [R=301,L]


как это адаптировать под nginx?

b3
06.01.2010, 18:19
#Wolf#, krypt3r
Зачем лишние телодвижения? Модификаторы is и тд

$var = "<script>print_email('mail','yandex.ru');</script>";
if(preg_match("#print_email\('(.*)','(.*)'\)#",$var, $m))
print_r($m);

m0Hze
07.01.2010, 01:36
http://wap.gismeteo.ru/gm/normal/node/prognoz_week/6/?field_wmo=2778&field_index=2778&sd_field_date=gen_past_date_0&ed_field_date=gen_past_date_-6&field_tod=2

Нужно сграбить: Полную дату, состояние(ветренно,пасмурн о...),и градусы.Весь мозг пере*бал,но там какой то символ нечитаемый :(

b3
07.01.2010, 05:43
http://wap.gismeteo.ru/gm/normal/node/prognoz_week/6/?field_wmo=2778&field_index=2778&sd_field_date=gen_past_date_0&ed_field_date=gen_past_date_-6&field_tod=2

Нужно сграбить: Полную дату, состояние(ветренно,пасмурн о...),и градусы.Весь мозг пере*бал,но там какой то символ нечитаемый :(
Вот грубо, на скорую руку:


<?php
$fp = file_get_contents('http://wap.gismeteo.ru/gm/normal/node/prognoz_week/6/?field_wmo=2778&field_index=2778&sd_field_date=gen_past_date_0&ed_field_date=gen_past_date_-6&field_tod=2');
################################################ ПАРСИМ
# Ясность неба #
if(preg_match_all('#<div style="font-size: 9px; padding: 0 0 3px 0; font-family: tahoma;">(.*)</div>#Uis',$fp,$osadki)) {
$osadki = array_map('strip_tags', $osadki[1]);
$osadki = array_map('trim', $osadki);
}

# Цельсий #
preg_match_all('#<span style="color: (darkblue|\#cc0000);">(.*)</span>#',$fp,$cel);

# День #
if(preg_match_all('#<a href="/gm/normal/node/prognoz_day/6/\?field_wmo=.*">(.*)</a>#Uis',$fp,$day)) {
$count = count($day[1]);
for ($i=0;$i < $count; $i++) {
$days[] = strip_tags($day[1][$i]);
$i++;
}
}
################################################ НАПАРСИЛИСЬ

for ($i=0, $o=0; $i<=6; $i++) {
echo $days[$i].'<br>';
echo $osadki[$o].'<br>';
$o++;
echo $osadki[$o].'<br>';
echo $cel[2][$i+1].'<br><hr>';
}
?>

Результат:

Чт 7 Января 2010г.
ясно
без осадков
-17°
Пт 8 Января 2010г.
без осадков
ясно
-22°
Сб 9 Января 2010г.
ясно
без осадков
-10°
Вс 10 Января 2010г.
без осадков
малооблачно
-6°
Пн 11 Января 2010г.
малооблачно
без осадков
+1°
Вт 12 Января 2010г.
без осадков
ясно
-12°
Ср 13 Января 2010г.
ясно
без осадков
-13°

Gifts
07.01.2010, 14:26
m0Hze http://pastebin.ru/309582

Но лучше было бы парсить откуда нибудь отсюда: http://gismeteo.ru/city/busy/?city=4368&shift=0&print=1

b3
07.01.2010, 14:55
m0Hze
когда-то для себя делал, маленький примитивный, но мне хватало.
https://forum.antichat.ru/showpost.php?p=1455551&postcount=846

DimOnOID
07.01.2010, 16:56
id=\"new_votes\">5<\/td>
собсна на пятёру.
Не шарю регулярках.хелп.

speles
09.01.2010, 23:14
Помогите составить регулярное выражение для HTML строки c правильной вложенностью скобок типа (() (()()) ), где, например, '(' = '<div>', а ')' = '</div>'. Выражение должно возвратить строку из символов между крайним ( и ).

Pashkela
09.01.2010, 23:23
id=\"new_votes\">5<\/td>
собсна на пятёру.
Не шарю регулярках.хелп.


<pre>
<?php
$a = 'id="new_votes\">5<\/td>
id="new_votes\">6<\/td>
id="new_votes\">7<\/td>
';
preg_match_all('|id="new_votes\\\">(.*)<\\\/td>|',$a,$b);
print_r ($b[1]);
?>
</pre>


Помогите составить регулярное выражение для HTML строки c правильной вложенностью скобок типа (() (()()) ), где, например, '(' = '<div>', а ')' = '</div>'. Выражение должно возвратить строку из символов между крайним ( и ).

Зацени пост выше своего и подумай, как надо спрашивать вопросы *лично я нихрена не понял, напиши тупо, что надо выдернуть, не умничай - в твоем примере всего две скобки, обе-две крайние, как не крути*

speles
09.01.2010, 23:31
Зацени пост выше своего и подумай, как надо спрашивать вопросы *лично я нихрена не понял, напиши тупо, что надо выдернуть, не умничай - в твоем примере всего две скобки, обе-две крайние, как не крути*
на сайте http://soft-best.ws/
нужно выдернуть полное описание новости

Pashkela
09.01.2010, 23:35
мда.....ты заставляешь думать, а это очень больно.....Сложно привести ссылку на конкретную новость и показать текст (в исходниках), который надо выдрать? Вежливости в школе не научили?

Gifts
09.01.2010, 23:36
speles preg_match ('~<div[^>]*>([\s\S]*)</div>~i',$in,$out);

GlooK
15.01.2010, 11:36
Подскажите, почему это:

preg_match('/\[\[(.*?)\]\]/im', $result, $temp);

не ищет в этом:

здесь много текста html
var friendsData = {здесьмногоразныхсимволов 'friends':[[2242936,"Магомед Арабханов","http:\/\/cs9696.vkontakte.ru\/u2242936\/b_0be60f10.jpg",1,"","Магомеда",0,1,932488,"",0],[17185664,"Влад Зотов","http:\/\/cs4326.vkontakte.ru\/u17185664\/b_f9cd97e9.jpg",1,"","Влада",0,1,953886,"",0],[3908114,"Влад Колесников","http:\/\/cs4150.vkontakte.ru\/u3908114\/b_5ca376ca.jpg",1,"","Влада",0,1,304,"12",0],[33390954,"Stephan Lampka","http:\/\/cs9636.vkontakte.ru\/u33390954\/b_14219071.jpg",1,"","Stephan",0,1,0,"",0],[25596089,"Оля Ющенко","http:\/\/cs10061.vkontakte.ru\/u25596089\/b_928d6744.jpg",1,"","Оли",0,1,2,"15",0]],'universities':{12:"ВИ",50745:"не указан"},'filter':'all'};
здесь много текста html включая [[]]

то что ограничено между [[ и ]]

Alpha][
15.01.2010, 13:39
Подскажите, почему это:

preg_match('/\[\[(.*?)\]\]/im', $result, $temp);

не ищет в этом:

здесь много текста html
var friendsData = {здесьмногоразныхсимволов 'friends':[[2242936,"Магомед Арабханов","http:\/\/cs9696.vkontakte.ru\/u2242936\/b_0be60f10.jpg",1,"","Магомеда",0,1,932488,"",0],[17185664,"Влад Зотов","http:\/\/cs4326.vkontakte.ru\/u17185664\/b_f9cd97e9.jpg",1,"","Влада",0,1,953886,"",0],[3908114,"Влад Колесников","http:\/\/cs4150.vkontakte.ru\/u3908114\/b_5ca376ca.jpg",1,"","Влада",0,1,304,"12",0],[33390954,"Stephan Lampka","http:\/\/cs9636.vkontakte.ru\/u33390954\/b_14219071.jpg",1,"","Stephan",0,1,0,"",0],[25596089,"Оля Ющенко","http:\/\/cs10061.vkontakte.ru\/u25596089\/b_928d6744.jpg",1,"","Оли",0,1,2,"15",0]],'universities':{12:"ВИ",50745:"не указан"},'filter':'all'};
здесь много текста html включая [[]]

то что ограничено между [[ и ]]
Если я не ошибаюсь , нужно вот так
preg_match_all('/\\[\\[(.*?)\\]\\]/im', $result, $temp);

GlooK
15.01.2010, 14:54
Если я не ошибаюсь , нужно вот так
К сожалению, не помогло(

P.S. Код нужен только для первого совпадения.

warlok
15.01.2010, 20:22
GlooK попробуй вместо /im поставить /s . Кстати что значит /im ? мм я вот у себя попробывал у меня твой вариант все нормально парсит.

GlooK
16.01.2010, 16:47
GlooK попробуй вместо /im поставить /s . Кстати что значит /im ? мм я вот у себя попробывал у меня твой вариант все нормально парсит.
Спасибо. Решение нашел.
Оказывается данные не получались из-за символа жадности ?
Как-то странно он работает.

WebGer
17.01.2010, 13:51
/<\?.*\?>/s
Работает неправильно.
Надо, чтобы из текста вида
<?
TEST
?>
NO
<?
TEST2
?>
он выбирал
<?
TEST
?>
и
<?
TEST
?>
А он выбирает ВЕСЬ текст, вместе со словом NO.
Хелп.

GlooK
17.01.2010, 13:54
/<\?.*\?>/s
Работает неправильно.
Надо, чтобы из текста вида
<?
TEST
?>
NO
<?
TEST2
?>
он выбирал
<?
TEST
?>
и
<?
TEST
?>
А он выбирает ВЕСЬ текст, вместе со словом NO.
Хелп.
Используй символ жадности:
/<\?(.*?)\?>/s

suser
17.01.2010, 17:02
preg_match_all("#<\?[^<>]*\?>#is", $text, $mas);

Gifts
17.01.2010, 18:04
suser Входной текст: <? echo '<hr />'; ?> И ваша регулярка не найдет ничего

b3
20.01.2010, 16:47
'#<input[^>]*? name="(.*)"#'
'#<img[^>]*? scr="(.*)"#'

krypt3r
21.01.2010, 08:17
|<input.+?name="(.+?)".*?>|i
|<img.+?src="(.+?)".*?>|i

Alpha][
27.01.2010, 20:52
Есть html код


<li><div class="structHeader"><a href="javascript://" id="plus" onclick="if($(this).html()=='++++') $(this).html('----'); else $(this).html('++++'); toggle('struct1771203'); " >++++</a> Регион</div><ul class="struct" id="struct1771203" style="display:none;"><li><a href="/novator/joomla/index.php?option=com_comprofiler&amp;view=userProfile&amp; user=141">Клюкин Александр Владимирович</a> - Продавец - консультант</li></ul></li></ul></li><li>


Помогите пожалуйста написать регулярку что бы отсечь все незакрытые теги не тронув при этом закрытые .

dimash
02.02.2010, 17:02
Доброго,
Помогите вспомнить основы.
Регулярные выражения я разберу, есть откуда почитать. Суть в другом, в самом принципе работы.

Например, когда мы преобразовываем ссылкуwww.yoursite.com/script.php?product=123

к виду www.yoursite.com/cat/product/123/


мы используем выражениеRewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2



Правильно ли понимаю, что изначально мы смотрим и пишем /script.php?$1=$2, то есть вторую часть, изначальную свою ссылку. Затем мы прописываем первую часть cat/(.*)/(.*)/$ и каждая переменная (в нашем случае $1, $2) (последовательно, слева направо?) идет прописываться в каждую круглую скобку? Вот, и какую роль тогда здесь играют регулярные выражения?

m0Hze
02.02.2010, 17:34
Доброго,
Помогите вспомнить основы.
Регулярные выражения я разберу, есть откуда почитать. Суть в другом, в самом принципе работы.

Например, когда мы преобразовываем ссылкуwww.yoursite.com/script.php?product=123

к виду www.yoursite.com/cat/product/123/


мы используем выражениеRewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2



Правильно ли понимаю, что изначально мы смотрим и пишем /script.php?$1=$2, то есть вторую часть, изначальную свою ссылку. Затем мы прописываем первую часть cat/(.*)/(.*)/$ и каждая переменная (в нашем случае $1, $2) (последовательно, слева направо?) идет прописываться в каждую круглую скобку? Вот, и какую роль тогда здесь играют регулярные выражения?
Это регулярное выражение говорит нам,что если, было обращение к например:
http://site.com/cat/33/4234/
Аппач автоматически внутри системы сделает перенаправление этого запроса в:
http://site.com//script.php?33=4234
То есть, говорят простыми словами,в первом выражении указываеться маска для запроса,какие запросы обрабатывать, вторым параметром являеться "куда пренаправлять",и там используются уже привычные в regEXP цифровые-переменные.Переменные идут в порядке слева на право.Как пример:
RewriteRule cat/(.*)/(.*)/param/([0-9]+)/$ /cat.php?$1=$2&params=$3
Делаем обращение к скрипту:

htto://site.com/cat/A1/B1/param/777/

Мы увидим тоже самое,что и при запросе:

htto://site.com/cat.php?A1=B1&params=777

Все просто.

dimash
02.02.2010, 23:52
Это регулярное выражение говорит нам,что если, было обращение к например:
http://site.com/cat/33/4234/
Аппач автоматически внутри системы сделает перенаправление этого запроса в:
http://site.com//script.php?33=4234
То есть, говорят простыми словами,в первом выражении указываеться маска для запроса,какие запросы обрабатывать, вторым параметром являеться "куда пренаправлять",и там используются уже привычные в regEXP цифровые-переменные.Переменные идут в порядке слева на право.Как пример:
RewriteRule cat/(.*)/(.*)/param/([0-9]+)/$ /cat.php?$1=$2&params=$3
Делаем обращение к скрипту:

htto://site.com/cat/A1/B1/param/777/

Мы увидим тоже самое,что и при запросе:

htto://site.com/cat.php?A1=B1&params=777

Все просто.
Благодарю за ответ. Странно вообще-то получается. Я хочу site.com/cat.php?A1=B1&params=777 с помощью RewriteRule переименовать в site.com/catalog/firma/obelisk/index.html (просто как пример), а вы говорите что RewriteRule делает абсолютно противоположную задачу. Верно? Как достигнуть моей цели?

m0Hze
03.02.2010, 00:14
Благодарю за ответ. Странно вообще-то получается. Я хочу site.com/cat.php?A1=B1&params=777 с помощью RewriteRule переименовать в site.com/catalog/firma/obelisk/index.html (просто как пример), а вы говорите что RewriteRule делает абсолютно противоположную задачу. Верно? Как достигнуть моей цели?
Вы ничего не поняли :(
Гугле->Регулярные выражения PHP

dimash
03.02.2010, 19:48
Вы ничего не поняли :(
Гугле->Регулярные выражения PHP
Я понял задом-наперед. Хорошо.
Как мне можно добиться такого результата
Сейчас ссылка index.php?action=company&lang=ru
Мне надо /ru/company.html

m0Hze
03.02.2010, 20:00
Я понял задом-наперед. Хорошо.
Как мне можно добиться такого результата
Сейчас ссылка index.php?action=company&lang=ru
Мне надо /ru/company.html
^([a-zA-Z]+)/(.*)\.html index.php?action=$2&lang=$1

dimash
03.02.2010, 20:08
^([a-zA-Z]+)/(.*)\.html index.php?action=$2&lang=$1
[a-zA-Z]+ можно [a-Z]+
А почему первое выражение было [a-zA-Z], а второе (.*)

mr.The
03.02.2010, 20:09
У меня есть куча select'ов:

<select id='w1'>
option value='1' >1</option>
option value='2' >2</option>
option value='3' >3</option>
</select>

<select id='w2'>
option value='1' >1</option>
option value='2' >2</option>
option value='3' >3</option>
</select>

<select id='w3'>
option value='1' >1</option>
option value='2' >2</option>
option value='3' >3</option>
</select>


Мне нужно получить все option у select'a с id=w2. Это можно сделать одной регуляркой?

wildshaman
04.02.2010, 14:10
Как сделать редирект с любго поддомена на страницы сайта?
к примеру, с 1234.site.ru нa site.ru/1234
при этом поддомены в панельке создавать по условию нельзя и поддомен может быть любым

m0Hze
04.02.2010, 16:14
У меня есть куча select'ов:

<select id='w1'>
option value='1' >1</option>
option value='2' >2</option>
option value='3' >3</option>
</select>

<select id='w2'>
option value='1' >1</option>
option value='2' >2</option>
option value='3' >3</option>
</select>

<select id='w3'>
option value='1' >1</option>
option value='2' >2</option>
option value='3' >3</option>
</select>


Мне нужно получить все option у select'a с id=w2. Это можно сделать одной регуляркой?
$text = "
<select id='w2'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
</select>";
preg_match("#id='w2'>(.*)<\/select>#s", $text, $match);
echo strip_tags($match[1]);

m0Hze
04.02.2010, 16:15
Как сделать редирект с любго поддомена на страницы сайта?
к примеру, с 1234.site.ru нa site.ru/1234
при этом поддомены в панельке создавать по условию нельзя и поддомен может быть любым
В панеле включить "автоподдомены" а будет автоматом делаться именно так.

Или аппаче_хост рулить.

Nosfer
05.02.2010, 17:47
Задача: составить регулярку.
Условие, максимально 4 параметра 10D 10H 10M 10S, но все 4 никогда не встрчаются, обычно не более двух:
а) на пыхе с использование preg_match_all
б) парсим различные результаты, варианты входных данных:
1) 6D 6H
2) 9H 5M
3) 1D 10M
4) 10M 14S

Сами параметры могут быть любыми, от 0 до 59.

Необходимо несмотря из входных данных заполнить массив:

[0] => Array
(
[0] => 6
[1] => ''
[2] => 1
[3] => ''
[1] => Array
[0] => 6
[1] => 9
[2] => ''
[3] => ''

[2] => Array
[0] => ''
[1] => 5
[2] => 10
[3] => 10

[3] => Array
[0] => ''
[1] => ''
[2] => ''
[3] => 14

1й подмассив - D (дни), 2й подмассив - H (часы), 3й подмассив - M (минуты), 4й подмассив - S (секунды)


Есть идеи?

mr.The
06.02.2010, 00:17
$text = "
<select id='w2'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
</select>";
preg_match("#id='w2'>(.*)<\/select>#s", $text, $match);
echo strip_tags($match[1]);
спасибо кэп! Я имел в виду, что мне нужно получить как value так и само значение между >1<.

Compton
06.02.2010, 11:43
<?
$text="<select id='w2'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>";
preg_match("/<select id='w2'>\r\n<option value='([0-9])'>(.*)<\/option>/s", $text, $m);
preg_match("/<select id='w2'>\r\n(<option value='([0-9])'>(.*)<\/option>)/s", $text, $s);
echo "сначала $s[1]<br> вконце $m[2]";
?>
пробуй)
З.Ы. Да,я извращенец

draliokero
07.02.2010, 14:44
Получаю от сервера ответ в виде неполного XML (без заголовка <?xml ... ?>.
Нужно распарсить таким образом: содержимое <input_img> в <img src="..." >, а <description> в <b>...</b> и вывести по порядку, как в XML'е.
Как лучше сделать? Дописать заголовок в начало ( $request = '<?xml version="1.0" encoding="UTF-8"?>'.curl_exec($ch); ) и использовать xml_parser или нечего не записывать и регулярками пройтись? Помогите распарсить.

<?xml version="1.0" encoding="UTF-8"?>
<math>
<variant>
<input_img>dss.localhost.ru/masima/Render.app.php/execute?id=2651267</input_img>
<solve>
<description>5</description>
<answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img>
</solve>
<solve>
<description>5</description><answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img></solve>
</variant>
</math>

Compton
07.02.2010, 15:33
может просто через preg_replace теги заменить?
или я что не так понял?

GlooK
07.02.2010, 15:35
может просто через preg_replace теги заменить?
или я что не так понял?
Я тоже не совсем догоняю, но попробую предложить:

<?php
$result = '<?xml version="1.0" encoding="UTF-8"?>
<math>
<variant>
<input_img>dss.localhost.ru/masima/Render.app.php/execute?id=2651267</input_img>
<solve>
<description>5</description>
<answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img>
</solve>
<solve>
<description>5</description><answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img></solve>
</variant>
</math>';

$result = preg_replace('#<input_img>(.*?)<\/input_img>#', '<img src="\\1" >', $result);
$result = preg_replace('#<description>(.*?)<\/description>#', '<b>\\1</b>', $result);
echo $result;
?>

draliokero
07.02.2010, 16:42
А можно сделать так, чтобы один массив заполнялся согласно одному рег. выражению:
<description>(.*?)<\/description>|<input_img>(.*?)<\/input_img> ?
preg_match_all вроде, но там многомерный массив получается и повторяются результаты

b3
07.02.2010, 19:16
Убери с регулярки скобки, оставив просто .* тоесть:

preg_match_all('#<description>.*<\/description>|<input_img>.*<\/input_img>#', $where, $matches);

Compton
10.02.2010, 22:47
Strilo4ka
если его не экранизировать,то это значит,что шаблон закончен

mailbrush
10.02.2010, 23:13
Strilo4ka
если его не экранизировать,то это значит,что шаблон закончен
Посмотри внимательнее... Шаблон открывается символом "#", тобишь экранировать слеш в этом случае нету потребности. Если бы шаблон начинался "/", то тогда да - экранировать надо.

draliokero
13.02.2010, 20:36
Пишу небольшой математический решатель для мобильных устройств, допускаю, что пользователь в спешке может ошибиться в написании названий функций, например, написать часть на русском, часть транслитом или где-нибудь посередине влепить, символов лишних.
Вроде все работает, но только если в скобках опять напишу, корень с ошибками, то замена внутри скобок не проходит, как исправить?

разобрался

felix_
14.02.2010, 14:19
<br/><br/>
1
<br/><br/>
2
<br/><br/>

как вытащить от сюда 2 ??
вот это почему то не работает
preg_match_all('#<br/><br/>[\s\S.*?]+<br/><br/>(\s\S.*?)<br/><br/>#iU',$answer,$count);

Solker
14.02.2010, 14:27
felix_

<?php

$answer = "<br/><br/>
1
<br/><br/>
2
<br/><br/>";

preg_match('#<br/><br/>\s+.+\s+<br/><br/>\s+(.+)\s+<br/><br/>#i',$answer,$count);

print_r($count);

?>

draliokero
14.02.2010, 15:45
Помогите, на пред. странице решить мою проблему

felix_, как вариант)

$answer = "<br/><br/>1<br/><br/>2<br/><br/>";
preg_match('#[0-9]<br/><br/>([0-9])#i',$answer,$count);
echo $count[1];

Solker
14.02.2010, 16:33
draliokero
А переводы строк сами найдутся?

Ctacok
14.02.2010, 18:41
Здравствуйте знатоки.
Вопрос от телезрителя.

У меня на страничке много <cite> site.ru - </cite>
Нужно отпарсить все URL, (site.ru), и записать их в файл (Запись и т.п. сам сделаю), нужна лишь регулярка, которая это всё вынесет в PHP.

На кону 0 руб, 0 копеек :)

casper-id
14.02.2010, 18:48
Ctacok, присоединяюсь к концерту по заявкам. Кто наваяет подобную регулярку?

Compton
14.02.2010, 18:49
страничку покажите

Ctacok
14.02.2010, 18:51
google.ru )

Compton
14.02.2010, 18:53
preg_match('/<cite>(.*)<\/cite>/i', $text, $m);
echo strip_tags($m[1]);

пока что могу только это предложить
сейчас гляну страницу