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

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

Автор: Brodyaga
Дата сообщения: 18.01.2008 09:53
VXC

Код:
$text=nl2br($text);
Автор: VXC
Дата сообщения: 18.01.2008 11:32
я в шоке!Огромное спасибо
Автор: andead
Дата сообщения: 31.01.2008 18:59
чёто я застрял с регуляркой, никак не получается разложить вот такую строку:

Код: price.php?a=showGoodsList&category=1-&sortOn=name&sortAs=asc
Автор: kivan
Дата сообщения: 01.02.2008 18:05
andead

Код:
<?php

$varName = "price.php?a=showGoodsList&category=1-&sortOn=name&sortAs=asc";
preg_match_all('/(.*category=)(.+?)(&.+)/i', $varName, $result, PREG_PATTERN_ORDER);

print_r($result);

?>
Автор: andead
Дата сообщения: 02.02.2008 14:48
kivan
спасибо!
Автор: 6epcepk
Дата сообщения: 15.02.2008 17:11
Очень странно, по идее данное регулярное выражение должно удалять все пустые строки.

Код: $str = "


sdf

df

";

$contents = preg_replace('#^$#s', "", $str);
die(nl2br($contents));
Автор: Delphi6
Дата сообщения: 15.02.2008 21:55
6epcepk

Цитата:
Очень странно, по идее данное регулярное выражение должно удалять все пустые строки.

Не совсем, оно будет удалять "ничего", потому что оно не будет задевать символ "\n" который в конце стоки. Надо делать что-то в это роде:

Код: <?php
$str = "




sdf

df

";

$contents = preg_replace('#^\s*$\n#m', '', $str);
die(nl2br($contents));
?>
Автор: 6epcepk
Дата сообщения: 15.02.2008 22:40
Действительно, так. Или я не правльно понял или в книжке Котерова неправильно написано...
Автор: Delphi6
Дата сообщения: 15.02.2008 23:20
6epcepk

Цитата:
Действительно, так. Или я не правльно понял или в книжке Котерова неправильно написано...

Не могу точно сказать почему в строку не включается перенос строки, наверно символ $ указывает на конец строки без "переноса на новую строку" и "возврат каретки". Я это случайно заметил давно, когда дебагил свой скрипт в пошаговом режиме.
Автор: Cheery
Дата сообщения: 16.02.2008 03:15
Delphi6
а как же виндовый перенос \r\n?


Цитата:
Не могу точно сказать почему в строку не включается перенос строки, наверно символ $ указывает на конец строки без "переноса на новую строку" и "возврат каретки". Я это случайно заметил давно, когда дебагил свой скрипт в пошаговом режиме.

именно

Цитата:
hen this modifier is set, the "start of line" and "end of line" constructs match immediately following or immediately before any newline in the subject string, respectively, as well as at the very start and end

именно поэтому, по сути, строка "удаляется", но перенос то остается..
так что я бы сделал, наверно, так
$contents = preg_replace('/^\s*\r?\n/m', "", $str);
правда и тут особенность - под маками новая строка как раз \r
Автор: Delphi6
Дата сообщения: 16.02.2008 09:22
Cheery

Цитата:
правда и тут особенность - под маками новая строка как раз \r

Я вот базируясь на твоем подходе немного до модернизировал, думаю сработает (не могу на практике проверить);

Код: $contents = preg_replace('#^\s*(?:\n|\r|\r\n)#m', '', $str);
Автор: 6epcepk
Дата сообщения: 16.02.2008 10:41
Delphi6
Cheery
Спасибо, работают оба варианта отлично!
Автор: Unsiker
Дата сообщения: 19.02.2008 22:15
помогите написать регуляторку для такого куска кода

Код:
<tr><td class=wblight align=right>&nbsp;<a href='test.php?id=5751'>-----22:50-----</a>&nbsp;</td><td class=wblight><table border=0 cellpadding=0 cellspacing=0><tr><td>&nbsp;</td><td><table border=0 cellspacing=0 cellpadding=0><tr><td><img width=24 height=24 src='i/logo.gif' border=0 title='logo'></td><td>-----text1-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td class=wblight align=center>&nbsp;<font color='000000'><b>-----28-----</b></font>&nbsp;</td></tr><tr>
<td class=wblight align=right>&nbsp;<a href='test.php?id=5750'>-----22:40-----</a>&nbsp;</td><td class=wblight><table border=0 cellpadding=0 cellspacing=0><tr><td>&nbsp;</td><td><table border=0 cellspacing=0 cellpadding=0><tr><td><img width=24 height=24 src='i/logo.gif' border=0 title='logo'></td><td>-----text2-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td class=wblight align=center>&nbsp;<font color='000000'><b>-----10-----</b></font>&nbsp;</td></tr>
Автор: Cheery
Дата сообщения: 20.02.2008 00:56
Unsiker

Цитата:
помогите написать регуляторку для такого куска кода

ну вот чуть чуть напрячься..
preg_match_all с кодом /-----(.*?)-----/
Автор: andead
Дата сообщения: 20.02.2008 01:07

Цитата:
ну вот чуть чуть напрячься..
preg_match_all с кодом /-----(.*?)-----/

мне кажеться тире только для лучшего восприятия примера

что то типа такого

Код: preg_match_all('/id=(\d+)\'>(.+?)\<.*logo\'\>\<\/td\>\<td\>(.+?)\<.*\<b\>(.+?)\<\/b\>/', $html, $matches);
Автор: Unsiker
Дата сообщения: 20.02.2008 12:18
andead
спасибо щас попробую
Автор: Unsiker
Дата сообщения: 20.02.2008 19:59

Цитата:
[1] => Array
(
[0] => 5751
[1] => 5750
)

[2] => Array
(
[0] => -----22:50-----
[1] => -----22:40-----
)

[3] => Array
(
[0] => -----text1-----
[1] => -----text2-----
)

[4] => Array
(
[0] => -----28-----
[1] => -----10-----
)

Подскажите, а как мне даные вывести на екран

а то echo $matches недает результатов.

Автор: Cheery
Дата сообщения: 20.02.2008 20:34
Unsiker

Цитата:
а то echo $matches недает результатов.

www.php.net/print_r
либо перебираем массив $matches и выбираем что нужно выводить
Автор: zoza
Дата сообщения: 20.02.2008 20:58
помогите пожалуйста...

есть html

нужно в нём все src тега script (если там нет http) заменить на http://site/$1
+
все href тега link (если там нет http) заменить на http://site/$1
+
<style(.*)@import "/files/css/file.css" заменить на
<style(.*)@import "http://site/files/css/file.css
Автор: Cheery
Дата сообщения: 20.02.2008 21:03
zoza
эм.. а читается чем? в смысле - html код доступен уже в самом php?
что нить такое для js
preg_replace('#(script\s+src)=(\"|\')([^:\1]*)(?:\2)#i','$1=$2http://site/$3$2',$str);
аналогично для css

preg_replace('#(import\s*)(\"|\')([^:\1]*)(?:\2)#i','$1$2http://site/$3$2',$str);

вроде работает.. код навскидку
Автор: Unsiker
Дата сообщения: 20.02.2008 21:06
print_r выдал
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) [4] => Array ( ) )
Подскажите в чем может быть ошибка?
Автор: Cheery
Дата сообщения: 20.02.2008 21:16
Unsiker

Цитата:
Подскажите в чем может быть ошибка?

строка, к которой было применено + регулярное выражение
Автор: Unsiker
Дата сообщения: 21.02.2008 08:51

Цитата:
строка, к которой было применено + регулярное выражение


Это подход с далека, Вот мой код

Код:
<?php
$html = " <tr><td class=wblight
align=right>&nbsp;<a
href='test.php?id=5751'>-----22:50-----</a>&nbsp;</td><td
class=wblight><table border=0 cellpadding=0
cellspacing=0><tr><td>&nbsp;</td><td><table
border=0 cellspacing=0 cellpadding=0><tr><td><img
width=24 height=24 src='i/logo.gif' border=0
title='logo'></td><td>-----text1-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td
class=wblight align=center>&nbsp;<font
color='000000'><b>-----28-----</b></font>&nbsp;</td></tr><tr>

<td class=wblight align=right>&nbsp;<a
href='test.php?id=5750'>-----22:40-----</a>&nbsp;</td><td
class=wblight><table border=0 cellpadding=0
cellspacing=0><tr><td>&nbsp;</td><td><table
border=0 cellspacing=0 cellpadding=0><tr><td><img
width=24 height=24 src='i/logo.gif' border=0
title='logo'></td><td>-----text2-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td
class=wblight align=center>&nbsp;<font
color='000000'><b>-----10-----</b></font>&nbsp;</td></tr>";

preg_match_all('/id=(\d+)\'>(.+?)\<.*logo\'\>\<\/td\>\<td\>(.+?)\<.*\<b\>(.+?)\<\/b\>/',$html, $matches);
print_r ($matches);

?>
Автор: andead
Дата сообщения: 21.02.2008 10:39
Unsiker

Код: preg_match_all('/id=(\d+)\'>(.+)\<.*logo\'\>\<\/td\>\<td\>(.+)\<.*\<b\>(.+)\<\/b\>/isU', $html, $matches);
Автор: Delphi6
Дата сообщения: 21.02.2008 11:26
Unsiker
Странный вы какой то Если у вас в реале просто -----*----- то зачем вам усложнять ситуацию и делать довольно сложный запрос, воспользуетесь прямо тем что вам советует Cheery с другой стороны если это не так то надо более конкретизировать задачу, мы же не можем просчитать все варианты за вас, и вообще не помешает почитать вот эту доку:
Как правильно задавать вопросы
Автор: Evgen_XXX
Дата сообщения: 23.03.2008 19:13
Помогите пожалуйста с регулярным выражением. Есть код:

Код: 3:1 (1:1)<br></pre><span class=cap>Футбол. Чемпионат Украины</span><pre>
Заря Лг Металлург Зп 0:1 (0:1)<br>Закарпатье Днепр Дп 1:1 (1:1)<br>Голы: первый - Днепр Дп на 13-й мин.
Пенальти - нет. Удаления - нет

Нефтяник Ахт Карпаты 0:0 (0:0)<br></pre><span class=cap>Футбол. Чемпионат Уругвая</span><pre>

Уондерерс Серру 1:0 (0:0)<br>Мирамар Мисионес Пеньяроль 0:2 (0:0)<br></pre><span class=cap>Футбол. Чемпионат Уэльса</span><pre>
Кернарфон
Автор: Mamay
Дата сообщения: 23.03.2008 20:23
типа так

Код: preg_match_all('~\n([^\s]*\s[^\s]*)\s{2,}([^\s]*\s[^\s]*)~ism',$str,$m);
Автор: Evgen_XXX
Дата сообщения: 23.03.2008 22:03
Mamay
Спасибо, что помог, но не все выдирает

Код: [1] => Array
(
[0] => Заря Лг
[1] => Закарпатье !!!
[2] => Нефтяник Ахт
...................

)

[2] => Array
(
[0] => Металлург Зп
[1] => Днепр !!!
[2] => Карпаты
................
Автор: Mamay
Дата сообщения: 24.03.2008 12:14
+ --- один или больше раз
{2,}не менее 2х раз
{2,5} от 2х до 5ти раз

Добавлено:
ну и
{,5} не более 5ти раз
Автор: DeADMoHAX
Дата сообщения: 15.04.2008 20:32
Надо было заменять слова на другие слова - по-умному, т.е. только отдельные слова.
есть такой код:

Код: $word='Hello';
$link='Happy';
print (preg_replace("/($word)[\s[:punct:]]/",$link,'Hello! Hello, Helloworld'));

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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