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

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

Автор: Cheery
Дата сообщения: 31.07.2012 19:06
Sutar

Код: $str = '[urle="http://site.ru"]ddd[/urle]';
echo preg_replace('#\[urle=(\'|")(.*)\\1\](.*)\[\/urle\]#iU', "<a target=\"_blank\" href=\"$2\">$2</a>", $str);
Автор: Sutar
Дата сообщения: 31.07.2012 19:41
Cheery
спасибо, а вот ...ce('#\[urle=(\'|")(.*)\\1\](.*)\[\/urle\]#iU'... нужна там?
Автор: Cheery
Дата сообщения: 31.07.2012 19:43
Sutar

Цитата:
нужна там?

да
Автор: Sutar
Дата сообщения: 31.07.2012 21:33
Cheery
а что оно означает? не могу найти в интернере....
Автор: Cheery
Дата сообщения: 31.07.2012 21:44
Sutar

Цитата:
не могу найти в интернере....

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Цитата:
U (PCRE_UNGREEDY)
This modifier inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by ?. It is not compatible with Perl. It can also be set by a (?U) modifier setting within the pattern or by a question mark behind a quantifier (e.g. .*?).

Автор: Spy686
Дата сообщения: 31.07.2012 21:44

Цитата:
Cheery
а что оно означает? не могу найти в интернере....

http://www.cyberforum.ru/php-regex/thread227459.html
Автор: Sutar
Дата сообщения: 31.07.2012 22:21
Cheery
Spy686
тоесть он захватывает всё? ну вроде как не жадный "определённое количеств" а жадный - всё. так я понимаю?
Автор: Cheery
Дата сообщения: 31.07.2012 22:31
Sutar
ну там же написано все и даже пример приведен.
.* "скушает" все до последнего условия идущего после *
текст
baaaabccccb
/b.*b/ вытащит baaaabccccb
/b.*?b/ = /b.*b/U и вытащит baaaab
Автор: Sutar
Дата сообщения: 02.08.2012 22:23
Cheery
Спасибо)
у меня проблема с одним вашим скриптом...
Вы мне дали скрипт, убрать лишние пробелы... тоесть если текст такой:

" (много пробелов) Привет... (много пробелов) как дела? (много пробелов) "
в итоге получился должно:
"Привет... как дела?"

вот попробуйте сами:


Код: <?php
if(isset($_POST["submit_add"]))
{
    $_POST["message"] = trim(preg_replace("/\s+/"," ", $_POST["message"]));
}
?>
<form method="post" action="">
<textarea name="message" id="message" rows="3" cols="50" style="width:150px;"><?php if(isset($_POST["submit_add"])) {echo "$_POST[message]";} else {echo "РРРР";} ?></textarea>
<br/>
<input type="submit" name="submit_add" value="Добавить" style="width:95px;"/>
</form>
Автор: Cheery
Дата сообщения: 02.08.2012 22:26
Sutar

Цитата:
такое только с элементом "Р" большим

? такое - что ? с каким элементом?
Автор: Sutar
Дата сообщения: 02.08.2012 22:36
Cheery
если писать "РРРР" получится "Р Р Р Р" кнопка с "Добавить" в иероглифы.
а на странице на сайте, у меня заместь всех "Р" квадратик (иероглиф не известный)
Автор: Cheery
Дата сообщения: 02.08.2012 22:39
Sutar
с кодировками разберитесь сначала на странице.
уникод? тогда /u в конце регулярки
Автор: Sutar
Дата сообщения: 02.08.2012 23:07
Cheery
если у меня используется не один preg_replace()

нужно чтоб было во всех так?


Код: $str = preg_replace(".....\U", "...", $str);
Автор: Cheery
Дата сообщения: 02.08.2012 23:08
Sutar

Цитата:
нужно чтоб было во всех так?

нет. /u и буква "u" маленькая.
говорит о том, что используется уникод
Автор: Sutar
Дата сообщения: 02.08.2012 23:25
Cheery
Спасибо
Автор: Sutar
Дата сообщения: 14.08.2012 16:46
В чем тут ошибка?


Код: $srt = "[bs]Sutar[/bs], [us]ПРИВЕТ![/us], [bs]тут[/bs][is]смотрим...[/is]";
echo preg_replace('#\[(\bs|us|is)\](.*)\[/(\bs|us|is)\]#iU', '<$1>$2</$3>', $srt);
Автор: DrakonHaSh
Дата сообщения: 14.08.2012 18:59
я бы сделал так:

Код:
$srt = "[bs]Sutar[/bs], [us]ПРИВЕТ![/us], [bs]тут[/bs][is]смотрим...[/is]";
echo preg_replace('#\[(bs|us|is)\](.*)\[/\\1\]#iU', '<$1>$2</$1>', $srt);
Автор: Cheery
Дата сообщения: 14.08.2012 19:03

Код: $srt = "[bs]Sutar[/bs], [us]ПРИВЕТ![/us], [bs]тут[/bs][is]смотрим...[/is]";
echo preg_replace('#\[(bs|us|is)\](.*)\[/\\1\]#iU', '<$1>$2</$1>', $srt);
Автор: Sutar
Дата сообщения: 14.08.2012 21:04
DrakonHaSh
Cheery
Спасибо большое, вроде работает. Такой скрипт будет работать без ошибок верно?))
Автор: Cheery
Дата сообщения: 14.08.2012 22:13
Sutar

Цитата:
Такой скрипт будет работать без ошибок верно?))

а какой смысл нам плохой код писать?
Автор: Eaglevil
Дата сообщения: 15.08.2012 02:57
Cheery, в случае вложенных тегов работать не будет.
Не проще ли так:
Код: $srt = "[bs]Sutar, [us]ПРИВЕТ![/us][/bs]";
echo preg_replace('#\[(/)?(bs|us|is)\]#i', '<$1$2>', $srt);
Автор: Sutar
Дата сообщения: 15.08.2012 11:03
Cheery
не просто спросил))
а можно проверку дописать?
чтоб нельзя было сделать так:

[bs]ddd[is]dd[/bs][/is] т.е. не правильно закрыть теги...
bs - b а is - i
Автор: Spy686
Дата сообщения: 15.08.2012 16:37
слепил такой php
но вот в этом месте (выделино) - незнаю как правильно поступить


Код:
<?php

// сбор данных из таблицы
$nachalo=$_POST['nachalo'];
$konec=$_POST['konec'];

$clear = file_get_contents('11.clear.txt');             // Вытягиваем текст

$text = preg_replace('/'.preg_quote($nachalo).'.*?'.preg_quote($konec).'/s', '', $clear);     // Удаляем фрагменты


$clearT = fopen('11.clear.txt', 'w');                     // Открываем файл clear.txt
fwrite($clearT, $text);                             // Записываем результат в файл clear.txt
fclose($clearT);                             // Закрываем файл clear.txt

$clear = file_get_contents('11.clear.txt');                 // Вытягиваем текст clear.txt

echo'<textarea name="text" style="width: 1250px; height:200px;">'.($clear).'</textarea></p>Скопируй текст';


Автор: neznayka3
Дата сообщения: 19.09.2012 08:43
подскажите программу для тестирования рег. выражений для десктопа(win). про online вкурсе

upd
пока регался на codeproject, нашел еще парочку regex-coach, regexbuddy

upd2 regexbuddy вообще супер
Автор: Cheery
Дата сообщения: 19.09.2012 08:52
neznayka3
ну, например
http://www.codeproject.com/Articles/24040/RegEx-Tester-Regular-Expression-Tester
но может отличаться от регулярок для конкретного языка
Автор: relictus
Дата сообщения: 02.10.2012 15:44
Помогите составить регулярку для выбора номеров телефонов из текста вида:

Код: Продаю 1-комн. кв новый дом, 2,3,4,5,6 /6 эт нов. кир. дома , площадью 34,0 кв. м , 35,4 кв. м 37 ,0 кв. м 44,5 кв. м 2-х ком. 50,49,59кв. м по 24кв. м, 3-х ком. 85,0 кв. имеется лифт. Цена 830,0 тыс. руб тел. 41-16-94, 8-962-441-1694
Автор: Cheery
Дата сообщения: 02.10.2012 19:06
relictus
ну так вы определитесь, что номера это просто цифры, которые могут быть разделены только пробелами, дефисами, ну и может быть чем то еще.
туда же условие на количество цифр
Автор: neznayka3
Дата сообщения: 02.10.2012 19:39
relictus

Код: ((8|\+7)[-\s]?)?(\(?\d{3}\)?)?[-\s]?[-\d\s]{7,15}
Автор: relictus
Дата сообщения: 03.10.2012 09:05
Cheery
neznayka3
Спасибо. Чуть изменив шаблон

Код: ((8|7)[-]?)?(\(?\d{3}\)?)?[-]?[-\d]{7,15}
Автор: hawik
Дата сообщения: 03.10.2012 09:57
relictus
Думаю не стоит всегда игнорировать слитно идущие цифры. А просто после напарсивания телефонов проверять чтобы небыло четырех или пяти нулей идущих подряд.
А руб. можно убирать так:

Код:
((8|7)[-]?)?(\(?\d{3}\)?)?[-]?[-\d]{7,15}(?! ?руб)

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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