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

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

Автор: exhugo
Дата сообщения: 16.07.2010 10:41
Мой пост немного выше - не актуален: решилось с помощью DOMDocument.
Ну а вообще составлять регулярные выражения нужно конечно учиться
Автор: DarkSmoke
Дата сообщения: 24.07.2010 16:57
Добрый день, помогите составить регулярное выражение.
Есть слова к примеру: Киев, арбуз, черепица, Шапка.
Надо что бы разрешались только русские буквы. Не чувствительные к регистру. Если есть левые буквы или символы, говорила что нельзя такие символы использовать.
Автор: kamdolina
Дата сообщения: 24.07.2010 17:03
Подскажите, как мне из повторяющегося html-кода вида:

.............................................................................................................................
куча ненужного кода
........

<h1><a style="margin: 0px; font-size: 18px; color:#5CA3BA; text-decoration: underline;" href="http://www.xa-xa.org/2010/07/24/podvodnye-peshhery-na-bagamakh.html">Подводные пещеры на Багамах</a>21 фото</h1>

........
куча ненужного кода
........

<img src="http://www.xa-xa.org/uploads/posts/2010-07/thumbs/1279948917_underwater_caves_23.jpg" style="border: none;" alt='Подводные пещеры на Багамах' title='Подводные пещеры на Багамах' />

........
куча ненужного кода
............................................................................................................................

вырезать содержимое ссылки на пост:
http://www.xa-xa.org/2010/07/24/podvodnye-peshhery-na-bagamakh.html
(принцип шаблона - содержимое ссылки href="" внутри тега <h1></h1>)

название поста:
Подводные пещеры на Багамах
(принцип шаблона - содержимое текста между тегами <a></a>, находящегося внутри тега <h1></h1> )

путь картинки к посту:
http://www.xa-xa.org/uploads/posts/2010-07/thumbs/1279948917_underwater_caves_23.jpg
(принцип шаблона - путь к картинке, находящейся в src="" внутри тега, начинающегося на <img src="http://www.xa-xa.org/...." ......>)

При условии, что в этом коде таких постов будет много(только все с разными темами).     
Автор: KYjIXaKEP
Дата сообщения: 28.07.2010 12:31
Народ помогите, пожалуйста.
Есть код

Код:
//$keyword - Любое слово или словосочетание!
//$text - любой текст, в котором может быть $keyword или не быть
$replace='ЗАМЕНА ПРОШЛА';
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. $keyword . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'si';
$text = preg_replace($regEx,$replace,$text);
Автор: Cheery
Дата сообщения: 28.07.2010 20:09
KYjIXaKEP
локаль выставляем?
Автор: KYjIXaKEP
Дата сообщения: 29.07.2010 21:03
В общем вот весь код.

Код: header('Content-type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8'); // Устанавливаем кодировку строк
echo "setlocale(LC_ALL, 'ru_RU.UTF-8')=" . setlocale(LC_ALL, 'ru_RU.UTF-8', 'ru_RU.utf8' ). "<br>";
echo "setlocale(LC_ALL, 0)=" . setlocale(LC_ALL, 0). "<br>";
echo "setlocale(LC_COLLATE, 0)=" . setlocale(LC_COLLATE, 0). "<br>";
echo "setlocale(LC_CTYPE, 0)=" . setlocale(LC_CTYPE, 0). "<br>";
echo "setlocale(LC_MONETARY, 0)=" . setlocale(LC_MONETARY, 0). "<br>";
echo "setlocale(LC_NUMERIC, 0)=" . setlocale(LC_NUMERIC, 0). "<br>";
echo "setlocale(LC_TIME, 0)=" . setlocale(LC_TIME, 0). "<br>";

$text=nl2br(file_get_contents('intext.txt')); //файл сохранен в UTF8

$keywords='надо|http://chizhekov.ru/
конец|http://ngs.ru/
';//ANSI !!! т.к. файл с кодом в анси сохранен
$keywords = (iconv('cp1251', 'utf-8', $keywords)) ? iconv('cp1251', 'utf-8', $keywords) : $keywords ; //переводим в УТФ

echo iconv('cp1251', 'utf-8' ,"ДО:------------------<br>").$text.iconv('cp1251', 'utf-8' ,"<br>------------------ПОСЛЕ \b:------------------<br>");

$keys=explode("\n", $keywords);
foreach ($keys as $key)    {
    $pat='/([\w\W]*?)\|([\w\W]*)/';
    if(preg_match_all($pat,$key,$matches,PREG_SET_ORDER)){
        foreach ($matches as $match) {
            $keyword=trim($match[1]);
            $link=trim($match[2]);
            $replace=' <a href="'.$link.'" target="_blank" title="'.$keyword.'">'.$keyword.'</a> ';
            $regEx = "#(?!((<.*?)|(<a.*?)))(\b". $keyword . "\b)(?!(([^<>]*?)>)|([^>]*?</a>))#si";
            $regEx2 = "#(?!((<.*?)|(<a.*?)))(\W". $keyword . "\W)(?!(([^<>]*?)>)|([^>]*?</a>))#si";
            $text2 = $text;
            $text = preg_replace($regEx,$replace,$text);
            $text2 = preg_replace($regEx2,$replace,$text2);
        }
    }
}
echo ($text);
echo iconv('cp1251', 'utf-8' ,"<br>------------------ПОСЛЕ \W:------------------<br>") . $text2;
Автор: neznayka3
Дата сообщения: 30.07.2010 07:17
есть таблица
Код: <table>
<tr>
<td><span class="name">Страна:</span></td>
<td><b><span class="gen"><font size="2">Россия</font></span></b></td>
</tr>
<tr>
<td><span class="name">Регион:</span></td>
<td class="row1"><b><span class="gen"><font size="2">Республика Адыгея (Адыгея)</font></span></b></td>
</tr>
...
</table>
Автор: DrakonHaSh
Дата сообщения: 11.08.2010 14:16
подскажите как достать из текста строки вида
xxx=blalbla; или вместо ; перевод строки или конец текста

пробовал
if (preg_match("/xxx=(.*)(;|\n)/",$text,$match))
и [;\n] и [;$] - нифига не получается


ps кстати прикололо что на http://www.php.net/manual/en/function.preg-match.php вообще никакого описания формата регулярных выражений нет. вообще никак не описано как надо строить первый аргумент функции. жесть
Автор: LeVaToS
Дата сообщения: 12.09.2010 10:11
а как регуляркой в php удалить всё что находится в скобках, вместе со скобками? не подскажите случаем.

Добавлено:
все, нашёл решение:
preg_replace("#(.*?)\(.*?\)(.*?)#is", "\\1\\3", $track[1]);
Автор: volod3000
Дата сообщения: 10.10.2010 06:52


Код: $pat='/([\w\W]*?)\|([\w\W]*)/';
Автор: den1x
Дата сообщения: 10.10.2010 22:17
volod3000
Вместо \w применить a-zа-я некатит?
Автор: volod3000
Дата сообщения: 11.10.2010 10:31
den1x .

Такое я уже пробовал, не прокатило, функция странная .
Как я понимаю ,
Первый фильтр делит выражение (Слово|Адрес) . А второй
ищет это слово в тексте и делает это слово ссылкой.
С латинскими буквами всё хорошо, а вот
кириллицу игнорирует.
Автор: den1x
Дата сообщения: 12.10.2010 05:07
volod3000
Походу не поленился и наинсталлировал - все работает. Проблема кроется в настройках сервера (отсутствует поддержка utf-8 ?).
Автор: volod3000
Дата сообщения: 12.10.2010 06:58
den1x . .
На счет сервера согласен, но видимо не поддержка utf8 (она есть), что-то другое.
По ходу , на Денвере у меня тоже работает.
Автор: GenezZ
Дата сообщения: 09.11.2010 10:07
Хоть и говорят что регулярка это просто, но вот я туплю.
Помогите пожалуйста.

Есть строка. Она составляется из блоков вида ':integer:'
Например $string=':12::17::34:';
Как вытащить эти цыфры?
Причем строка может и быть совсем пустой, или из одного значения, или ХЗ сколько значений. Цыфры нужны в массиве.
$array(12,17,34);
Спасибо!

Добавлено:
Отбой. Разобрался. /[0-9]{1,}/
Автор: holden321
Дата сообщения: 19.11.2010 17:44
в javascript нужно вырезать из строки всё кроме того что нужно
допустим из "one two three" получить "two" (т.е. слово "two" как раз нужное)
не могу понять как сделать отрицание (с помощью набора [^ ] можно исключить только отдельные символы, а как целые слова непонятно)
Автор: ckjet
Дата сообщения: 23.11.2010 14:40
У меня такой вопрос, мне нужно вырезать из кода

<a href="/whois?tld=ru&amp;domain=10-DEL.RU" title="Посмотреть WHOIS этого домена" onclick="return show_progress()">10-DEL.RU</a>

вырезать 10-DEL.RU.

Как это сделать?

пытался таким образом:

preg_match_all('|onclick="return show_progress()">(.*?)<\/a>|mi',$content,$dmn);

и так:

preg_match_all('|<a href="/whois?tld=ru&amp;domain=(.*)" title="Посмотреть WHOIS этого домена"|mi',$content,$dmn);

Добавлено:
я надеюсь вы объясните как брать именно return show_progress()">(.*?)<\/a> этот эллемент что заключен в тег a
Автор: kivan
Дата сообщения: 24.11.2010 15:04
ckjet

Код: preg_match_all('%<a[^>]*>(.*?)</a>%si', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[1];
print_r($result);
Автор: Cheery
Дата сообщения: 24.11.2010 20:06
holden321
javascript регулярные выражения
Автор: stroibat
Дата сообщения: 11.12.2010 15:50
Подскажите плиз
есть регулярное выражение
$regexp_allowed_characters = "[A-ZА-ЯёЁІіЎўҐґЇї0-9:;.,!?%'\/\|\"\(\) _=\&#№+-]";

С русскими буквами проблема. С заглавными нормально, маленькие буквы == т, х,ш,щ == не обрабатываются.
Автор: modwind
Дата сообщения: 11.12.2010 19:54
stroibat, зависит от кодировки текста. Если UTF-8, используется ли в регулярном выражении модификатор /u?

http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
Автор: SamuraiDV
Дата сообщения: 20.12.2010 21:45
Здравствуйте!
Пытаюсь разобраться с одной вещью и никак не выходит))

Вот код:

$homepage = file_get_contents('http://www.site.org/index.php');
preg_match('%<meta.*name="keywords".*content="(.*)"\s+/>%', $homepage, $regs);
echo $regs[1];

В переменную $homepage попадает все как надо, много кода, но вот дальше найти строчку

<meta name='keywords' content='bla, bla, bla' />";

и вывести все значения bla, bla, bla не получается.

Помогите пожалуйста!
Автор: Cheery
Дата сообщения: 20.12.2010 21:50
SamuraiDV

Цитата:
%<meta.*name="keywords".*content="(.*)"\s+/>%U


плюс точнее с кавычками.. если там одинарные, а не двойные - тоже не сработает..
когда не уверены можно делать и так
вместо " писать ("|')
с правильным экранированием, конечно же.
Автор: SamuraiDV
Дата сообщения: 20.12.2010 22:03
Огромнейшее спасибо, работает!

Но не могли бы вы подсказать, как будет выглядеть код с правильным экранированием?
Автор: Cheery
Дата сообщения: 20.12.2010 22:07
SamuraiDV

Цитата:
Но не могли бы вы подсказать, как будет выглядеть код с правильным экранированием?

экронирование я упомянул чтобы не было проблем с открывающими кавычками регулярного выражения, если не используете оба типа кавычек сразу
Цитата:
("|')
то оно и не нужно.

Автор: SamuraiDV
Дата сообщения: 20.12.2010 22:33
Просто я возможно буду с нескольких сайтов доставать meta теги и на разныхс сайтах могут быть по разному проставлены кавычки.
Автор: NecT1
Дата сообщения: 03.01.2011 13:02
В зависимости от обстоятельств генерируется следующая строка html-кода:


Код: <h4 id="city">Название города</h4>
Автор: Mamay
Дата сообщения: 03.01.2011 15:48
~>([^<]*)</h4>~
Автор: Canonier
Дата сообщения: 18.01.2011 17:59
Ребята, помогите, пожалуйста!
Есть у нас штука, которая фильтрует информацию по вхождению! ) Работает по стандарту POSIX, задаются регулярные выражения! Но не php и не Perl
Задача такова: нужно написать регулярное выражение, которое будет реагировать на слово "хер", но не будет реагировать на слова "похерить", "парикмахер" и "херомантия"
Как мне это реализовать на POSIX?
Спасибо!
Автор: Mamay
Дата сообщения: 25.01.2011 17:04
\sхер\s
на самом деле пхпшный PCRE не очень отличается от POSIX
http://ua2.php.net/manual/en/reference.pcre.pattern.posix.php

Добавлено:
как начальное и конечное условие можно поставить [^а-я]*
но я не уверен

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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