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

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

Автор: Vitus_Bering
Дата сообщения: 23.12.2014 09:48
ivanmara

Код:
if ( preg_match("'<input type=hidden.+?value=\"(\d+)\">'", $s, $match_arr) ) {
$result = $match_arr[1];
}
Автор: ivanmara
Дата сообщения: 23.12.2014 12:45
Vitus_Bering

Спасибо за ответ. Но все value меняются при каждом вызове странички. Мне как раз нужно получать это динамическое значение. Как бы это сделать получить значение между кавычками ... ?
Автор: Vitus_Bering
Дата сообщения: 23.12.2014 14:10
ivanmara

$result возвращает значение между кавычками
Автор: Mavrikii
Дата сообщения: 23.12.2014 20:01
ivanmara
такие вещи лучше не делать регулярками а парсерами DOM структуры

Vitus_Bering
а если там не один hidden элемент? неплохо бы еще и условие для имени добавить.
Автор: ivanmara
Дата сообщения: 23.12.2014 23:20
Mavrikii

Там как раз по одному элементу на страничке ...
Автор: Sutar
Дата сообщения: 24.12.2014 12:09
можете помочь сделать правильный запрос в регулярном выражении?
у меня что-то не получается.... копался часа 2...


Код: $url = Array(
'http://site.ru',
'https://site.ru',
'http://site.ru/',
'https://site.ru/',
'http://site.ru//',
'https://site.ru//',
'http://site.ru/server.php',
'https://site.ru/server.php',
'http://site.ru/blog/server.php',
'https://site.ru/blog/server.php',
);


for($i = 0; $i < count($url); $i++)
{
    if(preg_match("/^(http|https):\/\/[a-z0-9\.]*?(\/|.*)$/i", $url[$i], $arc))
        $url[$i] = $arc[2];
    echo "<a href=\"http://". $url[$i] ."\" target=\"_blank\">". $url[$i] ."</a>";
    echo "<br/>";
}
Автор: Vitus_Bering
Дата сообщения: 24.12.2014 14:04
Sutar

Код:
for($i = 0; $i < count($url); $i++) {

if (preg_match("/^(http|https):\/\/(.+?)(\/|$).*$/i", $url[$i], $arc)) {
$url[$i] = $arc[2];
echo "<a href='http://$url[$i] target='_blank'>$url[$i]</a>";
echo "<br/>";
}
}
Автор: Sutar
Дата сообщения: 24.12.2014 15:10
Vitus_Bering
спасибо, работает отлично
Автор: Mavrikii
Дата сообщения: 24.12.2014 21:18
Sutar
http://php.net/parse-url
и никаких регулярок не нужно
Автор: ivanmara
Дата сообщения: 28.12.2014 13:36
Добрый день уважаемые спецы. Подскажите как составить регулярку для следующей ситуации.

Внутри html-ки есть куча следующих тегов (под троеточиями ещё куча кода):

... <a href="javascript:parent.c('%EC%E0%EC%EA%E0','2595',0)" target=plashka_004>тест</a> ...
... <a href="javascript:parent.c('gps%5Fgprs','9010',0)" target=plashka_004>gps_gprs</a> ...
... <a href="javascript:parent.c('sueta','5508',0)" target=plashka_004>sueta</a> ...

Задача такая: Вытащить первый и второй аргумент функции parent.c. То есть должно получится:
%EC%E0%EC%EA%E0 2595
gps%5Fgprs 9010
sueta 5508

Как бы это сделать с помощью регулярных выражений ?
Автор: Vitus_Bering
Дата сообщения: 28.12.2014 16:00
ivanmara

Код:
if ( preg_match("'javascript:parent.c\(\'(.+?)\',\'(.+?)\'.+>'", $s, $match_arr) ) {
$result = $match_arr[1].' ' .$match_arr[2];
}

echo $result;
Автор: DarkSmoke
Дата сообщения: 05.01.2015 16:23
Добрый день
Гуру регулярных выражений, помогите.
Я уже третий день сижу над регуляркой и не как не могу выдернуть нужные данные.

Есть сайт http://minfin.com.ua/currency/usd/
от туда хочу выдергивать курс и название банка.

Помогите, пожалуйста.
Автор: Mavrikii
Дата сообщения: 05.01.2015 21:36
DarkSmoke
Такие вещи лучше делать без регулярок. Да, получается длиннее.

Код: $page = 'http://minfin.com.ua/currency/usd/';
header('Content-Type: text/html; charset=utf-8');

$cl2 = curl_init();
curl_setopt($cl2, CURLOPT_URL, $page);
curl_setopt($cl2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cl2, CURLOPT_HEADER, 0);
curl_setopt($cl2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');
curl_setopt($cl2, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($cl2, CURLOPT_TIMEOUT, 60);
curl_setopt($cl2, CURLOPT_REFERER, $page);
$page = curl_exec($cl2);
curl_close($cl2);

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($page);
$xpath = new DOMXPath($doc);
$table = $xpath->query('//table[@class="tstyle b-mrg"]')->item(0);
foreach($table->getElementsByTagName('tr') as $tr)
{
$tds = $xpath->query('.//td', $tr);
if ($tds->length == 4)
{
$name = $tds->item(1)->textContent;
$rate = $tds->item(2)->textContent;
echo $name. ": " . $rate . "<br>";
}
}
Автор: D1D1D1D
Дата сообщения: 08.02.2015 01:59
Каким будет выражение для ситуации: получить в переменную любой сплошной набор символов, включающих один или более знак (например: =), при этом пропуская такие знаки внутри угловых скобок?

Так же интересует, можно ли одним выражением описать ситуацию, когда например в строке может встречаться неопределённое количество неких символов, а в шаблоне он задаётся один раз. Т.е., найти в строке все варианты за раз? —

(.*?)=(.*?)
(.*?)=(.*?)=(.*?)
(.*?)=(.*?)=(.*?)=(.*?)
(.*?)=(.*?)=(.*?)=(.*?)=(.*?)

и т. д.
Автор: DarkSmoke
Дата сообщения: 19.02.2015 16:11
Добрый день
Подскажите, как получить отдельно функции

Код:
def zabbix_install():
""" Zabbix install """
dsfsdfsd

def test():
""" - test """
arfsgs rsh rwr rwh
fsfsg
Автор: Mavrikii
Дата сообщения: 19.02.2015 19:58
DarkSmoke
там не все так просто. не проще сделать без регулярки, простым циклом и определением количества отступов или начала функции?

что то такое, навскидку

Код: $code =<<< CODE
def zabbix_install():
""" Zabbix install """
dsfsdfsd

def test():
""" - test """
arfsgs rsh rwr rwh
fsfsg
CODE;

$functions = array();
$current = null;

foreach(explode("\n", $code) as $line)
if (preg_match('#def (\w+)\(\):#U', $line, $fun))
{
$current = $fun[1];
$functions[$current] = '';
}
elseif (preg_match('#^\s+(.*)$#U', $line, $body) && $current)
{
$functions[$current] .= $body[1];
}
elseif (preg_match('#^\s+$#U', $line))
$current = null;

var_dump($functions);
Автор: DarkSmoke
Дата сообщения: 20.02.2015 10:59
Mavrikii
Спасибо большое

У меня только вопрос, почему символ решетки не отображается
Пример:

Код:
def zabbix_install():
""" Zabbix install """
# kjjjjfjjf
# test
# prog
#

def test():
""" - test """
arfsgs rsh rwr rwh
fsfsg
Автор: Mavrikii
Дата сообщения: 22.02.2015 03:47
DarkSmoke

Цитата:
Вот все что типо закоменчено не выводится.

потому, что регулярка требует наличия пустого символа в первом столбце.
в принципе можно "вытаскивать" все до следующего def или до конца строки.
смотря какие еще конструкции могут быть.
или так

Код: preg_match('#^[\s\#]+(.*)$#U
Автор: Paha_W
Дата сообщения: 20.03.2015 09:14
Есть телефоны:

Цитата:
+7 - (914) - 345 - 21 - 10
8 - (914) - 345 - 21 - 10


Регулярка ниже не подходит, выпадает если пробелов больше 0 , а так же черточек больше 1


Код: ^((\+7|8)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
Автор: Mavrikii
Дата сообщения: 20.03.2015 09:17
Paha_W
не подходит для чего? убейте все, кроме цифр, и отформатируйте так, как вам хочется, заодно проверив количество цифр
Автор: Paha_W
Дата сообщения: 20.03.2015 09:23
Mavrikii
Не подходит для того чтобы телефон отпарсить

Код:
^(\+7|8)[^\s]*[\-]?[^\s]*([\(]?\d{3}[\)]?)[^\s]*[\-]?[^\s]*(\d{3}[^\s]*[\-]?[^\s]*\d{2}[^\s]*[\-]?[^\s]*\d{2})$
Автор: Mavrikii
Дата сообщения: 20.03.2015 09:26
Paha_W
я же написал что делать, зачем усложнять все?
Автор: Paha_W
Дата сообщения: 20.03.2015 09:32
Mavrikii
По-моему у меня все четко написано.
Спасибо за совет, но не работает. Если у вас есть решение, как вы видите данное регулярное выражение, представьте в студию, мы обсудим его.
Автор: Mavrikii
Дата сообщения: 20.03.2015 09:45
Paha_W

Код: <?php
$phone = "+7 - (914) - 345 - 21 - 10";

$digits = preg_replace('#[^\d]#', '', $phone);
$formatted = preg_replace('#^(7|8)(\d{3})(\d{3})(\d{2})(\d{2})$#', '$1 ($2) $3-$4-$5', $digits);
echo $digits == $formatted ? "Wrong format" : ($formatted[0] == 7 ? "+" : "") . $formatted;
Автор: Paha_W
Дата сообщения: 20.03.2015 10:50
Mavrikii
Оно, конечно, так! Но представьте себе, что есть текст и в нем не только телефоны, а так же простые цифры, числа. После вырезки всего кроме цифр, наш парсер будет так же реплайсить и эти одиночные цифры.

усложненная ситуация:

Код:
$phone = "dfa 34 dfa 2 dfdf sdfas df +7 - (914) - 345- 21 -10 sdf asdfsadfasd +7 - (914) - 345- 21 -10";
Автор: ManHunter
Дата сообщения: 20.03.2015 13:00

Код:
<?
$phone = "dfa 34 dfa 2 dfdf sdfas df +7 - (914) - 345- 21 -10 sdf asdfsadfasd +7 - (914) - 345- 21 -10";

$phone = preg_replace('#[^\d[:alpha:]]#', '', $phone);
preg_match_all('#(7|8)(\d{3})(\d{3})(\d{2})(\d{2})#', $phone, $matches);
print_r($matches[0]);
Автор: Grishanenko
Дата сообщения: 22.03.2015 09:43
Пытаюсь почистить файл от строк типа типа:

Код: "children":[{"url":"https://www.somesite2.com/link1/","title":"title123","ID":1043242073,"docshellID":1108,"referrer":"http://www.somesite2.com/showthread.php?t=123456","docIdentifier":3,"scroll":"0,0"}]
Автор: Mavrikii
Дата сообщения: 22.03.2015 09:46
Grishanenko
что значит "подчистить" файл? что еще в нем есть?
это json, его можно поправить без регулярки.
Автор: Grishanenko
Дата сообщения: 22.03.2015 11:01
Mavrikii
Да, это json база от FireFox. Чищу ее (уменьшаю размер) от параметров давно неиспользуемых плагинов, которые на каждую вкладку прицепили свои настройки. Или же просто информация, которая мне не нужна (referrer, openerGroup, owner_b64, children, possibleparent). Найти простой редактор, который может удалить или заменить все строки с соответствующим названием сразу (а не в ручном режиме по одной) у меня не получилось. Потомоу и подумал что удаление через RegExp (программа для пакетной обработки UV FilesCorrector) - более простой вариант.
Автор: Mavrikii
Дата сообщения: 22.03.2015 21:30
Grishanenko

Цитата:
Потомоу и подумал что удаление через RegExp (программа для пакетной обработки UV FilesCorrector) -

тогда зачем пишете в тему о php регулярках??

если используете php, то считываете файл, далее json_decode, удаляете что не нужно, json_encode и снова сохраняете в файл.

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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