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

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

Автор: andead
Дата сообщения: 09.10.2009 14:25
Nukedx

Код: #В ролях: .*<br />(.+)#
Автор: mitiy
Дата сообщения: 13.10.2009 13:25
помогите плиз, наверняка кто-то сталкивался с этим. никак не могу добиться нужного результата


Цитата:
подскажите плиз. заменяю при выводе страницы втречающиеся в глоссарии термины на
<a href="url">термин</a> , но если в тексте встречаются ссылки и названии ссылки встречается термин, как например тут:
<a href="url">текст термин текст</a>
то preg_replace заменяет термин в названии ссылки тоже и весь код страницы портиться. как ограничить preg_replace чтобы он не трогал термины внутри названий уже существующих ссылок.

текущий код замены:
$glossary['str'] = "(\b|\B)".$glossary['str']."(\b)";
$row['full_story'] = preg_replace("'".$glossary['str']."'i", "<a href=\"".$glossary_link."\">".$glossary['str']."</a>", $row['full_story']);


пробую так:
$glossary['str'] = "(^2|\b|\B)".$glossary['str']."(^2|\b)(?!<\/a)";
выходит но только если термин стоит прямо перед </a> , показать что там могут быть ещё слова не получается

Автор: gagar9
Дата сообщения: 22.10.2009 12:48
есть такой файл txt

Parent Directory 03-Jul-2009 15:51 -
02206b.jpg 08-Sep-2009 14:54 24k
03902b.jpg 26-Aug-2009 13:49 62k
08738b.jpg 18-Aug-2009 15:26 110k
10106b.jpg 21-Jul-2009 14:23 63k
1010b.jpg 21-Jul-2009 14:23 57k
1011b.jpg 21-Jul-2009 14:23 190k
10279b.jpg 21-Jul-2009 14:23 4k
1030b.jpg 21-Jul-2009 14:23 89k
10313b.jpg 21-Jul-2009 14:23 14k
1032b.jpg 21-Jul-2009 14:23 75k

из него можно виташить толко все
02206b.jpg
03902b.jpg
и т.д



есть такой код как изменить чтобы получить то что хочу
это чётко работает для электроных адресов удирает все ненужные и вытаскивает Емайл адреса

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>....das6....</title>

</head>

<body>

<?php
error_reporting(0);

$fp=fopen('1.txt','a+');

$r=fread($fp,filesize('1.txt'));
fclose($fp);


///////////////reg exp////////////////////
$all_reg='|([\w\d-_\.]{2,40}@[\w\d-_\.]{2,40}\.[\w-_]{2,10})|i';
preg_match_all($all_reg, $r, $all, PREG_SET_ORDER);
/////////////////////////////////////////


echo '';
for($i=0;$i<count($all);$i=$i+5)

{
echo ''.$all[$i][1].'<br>'.$all[$i+1][1].'<br>'.$all[$i+2][1].'<br>'.$all[$i+3][1].'<br>'.$all[$i+4][1].'<br>';
}


echo '';



?>

</body>
</html>
Автор: JacobyD
Дата сообщения: 22.10.2009 15:53

Цитата:
есть такой код как изменить чтобы получить то что хочу

круто объясняешь...

"\.jpg(*?.)$" , " \.jpg"
Автор: koc
Дата сообщения: 07.11.2009 20:24

Код: [:loop a in b:]
text1
[:loop d in a.b:]
text2
[:endloop:]
text3
[:endloop:]

[:loop e in f:]
text4
[:endloop:]
Автор: koc
Дата сообщения: 08.11.2009 22:43
я пишу шаблонизатор. И вот там будут вложенные циклы, блоки, условия и тд. Как их парсить не пойму.
Автор: andead
Дата сообщения: 08.11.2009 22:53
походу рановато вам писать свой шаблонизатор)
Автор: koc
Дата сообщения: 08.11.2009 23:02
кто знает. Уже год работаю по аутсорсингу с эстонцами в поддержке крупной CMS'ки. В свободное от работы и учебы время занимаюсь своей.

Можно использовать h2o-шаблонизатор (там такой же синтаксис - джангоподобный), но я хочу свой.
Автор: Vofka
Дата сообщения: 09.11.2009 00:05
видел и перепробовал много разных шаблонизаторов, но для себя выбрал шаблонизатор от phpbb3
все включено и циклы и блоки и условия



Добавлено:
и лэнг в шаблон подхватывает без объявления, в самом шаблоне нужно только L_ в начало добавить.
Автор: evle
Дата сообщения: 09.11.2009 03:50
koc
Регулярные выражения не предназначены для подобных действий. Тут нужен полноценный парсер и интерпретатор.
Автор: koc
Дата сообщения: 09.11.2009 11:23
evle

$string = "some text (a(b(c)d)e) more text (c(d(e)f)g) aa";
if (preg_match_all("#\((?>[^()]+|(?R))*\)#", $string, $matches)) {
    echo "<pre>"; print_r($matches); echo "</pre>";
}
такая вещь распарсивается.

и такой простыней кода шаблон разделяется на отдельные циклы _http://pastebin.mozilla-russia.org/102577

Ладно, написать свой шаблонизатор была не самая удачная затея. Я перешел на h2o (хттп://www.h2o-template.org/)
Автор: eternal2000
Дата сообщения: 21.11.2009 21:26
есть html код:

Код:
<!-- BEGIN #meta -->
<div class="meta">

    <h3 class="m-groups">Группы товаров</h3>
    <ul class="mn">
             <li><a href="/catalog/233/" class="sec-233">Первое</a></li>
                <li><a href="/catalog/232/" class="sec-232">Другое</a></li>
                <li><a href="/catalog/342/" class="sec-342">Третье</a></li>
            </ul>
        
    <div class="sclear"></div>
        <h3 class="m-tags" id="tags-header"><a href="#" onclick="toggleTags();return false;" class="js">Метки товаров</a></h3>
    <ul class="mt" id="tags">
               <li><a style="font-size:120%" href="/catalog/tag/bsod/">bsod</a></li>
               <li><a style="font-size:120%" href="/catalog/tag/intel/">intel</a></li>
               <li><a style="font-size:120%" href="/catalog/tag/lexus/">lexus</a></li>
               <li><a style="font-size:133.684210526%" href="/catalog/tag/mitsubishi/">mitsubishi</a></li>
               <li><a style="font-size:120%" href="/catalog/tag/nokia/">nokia</a></li>
               <li><a style="font-size:133.684210526%" href="/catalog/tag/алкоголь/">алкоголь</a></li>
         </ul>
    </div>
<!-- END #meta -->
Автор: andead
Дата сообщения: 21.11.2009 21:34
'#/catalog/(\d+?)/#', '/catalog.php?id=$1'
'#/catalog/tag/(\w+?)/#', '/catalog_tag.php?id=$1'
Автор: eternal2000
Дата сообщения: 21.11.2009 22:02
эмм... а можно не только саму регулярку а полный php код вместе с ней?)
Автор: andead
Дата сообщения: 21.11.2009 23:38
$text = preg_replace('#/catalog/(\d+?)/#', '/catalog.php?id=$1', $text);
$text = preg_replace('#/catalog/tag/(\w+?)/#', '/catalog_tag.php?id=$1', $text);
Автор: eternal2000
Дата сообщения: 22.11.2009 00:03
andead
спасибо
Автор: miksanfree
Дата сообщения: 28.11.2009 02:21
Подскажите почему регэксп:
[no]some?.thing[/no]
срабатывает и на
[no]some thing[/no]
и на
[no]something[/no]

Сам составлял, но хоть убей не могу понять как я его придумал.
Автор: Cheery
Дата сообщения: 28.11.2009 02:30
miksanfree
потому что ? означает, что буква e может быть, а может и не быть
в то же время . означает любую букву.
ну вот и додумывайте.
Автор: SHIRATANI
Дата сообщения: 28.11.2009 04:15
Здравствуйте, помогите решить такую задачу
Из секции VirtualHost, конфига апача,
<VirtualHost {IP}>
ServerAdmin webmaster@site.com
DocumentRoot /path/to/site.com/html
Servername site.com
ServerAlias www.site.com
CustomLog /usr/local/apache/logs/site.com_access combined
</VirtualHost>

нужно получить значение Servername и DocumentRoot, и поместить их в массив $serv[<Servername>]=[<DocumentRoot>]
Автор: Cheery
Дата сообщения: 28.11.2009 04:55
SHIRATANI
ну так получите.. построчная регулярка.. начало вы знаете
/^Servername\s+(.*)$/im
Автор: Guerra
Дата сообщения: 02.12.2009 04:18
Здравствуйте, помогите пожалуйста с решением задачи.
Нужно с помощю PCRE вывести первых 3 параграфа, из 5 имеющихся.
Как выводить все 5 параграфов разобрался, а с выводом 3 из 5 нет
Автор: SHANDLE
Дата сообщения: 03.12.2009 08:02
Что то заклинило с регулярными выражениями:
$s ="
begin
Текст, который нужно вырезать
end
Произвольный текст, содержащий end
";

preg_repalce('/begin([\w]+)end/', ' ', $s);
вырезает от begin до end, который в произвольном тексте.
Как сделать, чтобы он вырезал только до первого встречного end?


Добавлено:
Все, разобрался.
Дело в "жадном" и "ленивом" поиске, "жадный" - поиск строки максимальной длины, "ленивый" - минимальной длины

preg_repalce('/begin([\w]+?)end/', ' ', $s);
Вот так будет "ленивый" поиск, и вырежет только то что нужно.

А вот для задачки из шапки (первого поста):
preg_replace('/<table>([\w\W]*?)<\/table>/', '&nbsp;', $s);
Автор: Alex_Smok
Дата сообщения: 08.12.2009 18:40
вот полезная информация по PHP
http://computer.***.net/help_book/3/index.html
Автор: Xriby
Дата сообщения: 09.12.2009 09:35

Код: function get_table_by_class($url, $class_name)
{
    $html = file_get_contents($url);
    $re = '{
    <table[^>]+\bclass\s*=\s*[\'"]?' . $class_name . '\b["\']?[^>]*>
    (?:
     [^<]++|
     (
        <table[^>]*>
        (?:
         [^<]++|
         (?1)|
         .
        )*?
        </table>
     )|
     .
    )*?
    </table\s*>
    }xs';
    preg_match($re, $html, $m);
    $text = $m[1];
    $text = preg_replace('{<img[^>]*>}', '', $text);
    $text = preg_replace('{<a[^>]*>}', '', $text);
    $text = preg_replace('{</a[^>]*>}', '', $text);
    return $text;
}
Автор: alexbel31
Дата сообщения: 09.01.2010 22:54
Есть такое код:

if (!preg_match("/^[a-zа-я]{2,20}$/i",$name))
{
$success = false;
$error .= "Некорректно введено имя!<br/> \n\r";
}
т.е. переменная name должна состоять из англ. или русских букв. Как сделать чтобы success был true, если переменная name соответствует шаблону /^[a-zа-я]{2,20}$/i или поле пустое.
Я в php новичек, прошу помощи у гуру
Автор: andead
Дата сообщения: 09.01.2010 23:07
alexbel31

Код: $success = ($name == '' || preg_match("/^[a-zа-я]{2,20}$/i",$name));
Автор: alexbel31
Дата сообщения: 09.01.2010 23:24
спасиб большое, если кому нужно сделал так:


Код: if ($name == '' || preg_match("/^[a-zа-я]{2,20}$/i",$name))
             {
                
            } else {
                $success = false;
                $error .= "<font color=\"red\">Некорректно введено имя!</font><br/> \n\r";                
            }

Автор: muk as
Дата сообщения: 26.01.2010 05:25
Имеется текстовый документ с одной строкой вида
192.168.0.1 192.168.0.5 ... 192.168.x.y
таких ip адресов может быть от 0 до нескольких сотен
необходимо первому в строке ип адресу присвоить $ip[0][0], второму - $ip[0][1] и так далее
не могу никак составить регулярное выражение для функции preg_match_all.
Автор: Cheery
Дата сообщения: 26.01.2010 05:38
muk as
разбейте по пробелу в массив, отсортируйте (можно разбив по точкам)
и все
Автор: Mira
Дата сообщения: 03.02.2010 21:59
на форумах часто вставляют линейки и фотки,
хотелось бы что бы все левые урлы предшествуюшие картинке были удалены, за исключением нескольких сайтов,
подскажите как это сделать?
спасибо.

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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