|
|
|
| Хочу понять суть работы preg_replace, но ни Самоучитель рнр, ни Практика создания сайтов не внесли ясности.
Для пробы написал 4 варианта:
$text = 'http://nova.rambler.ru/search?set=www&words=Человек&btnG=Найти!';
echo preg_replace("Найти!", "", $text); // 1. Хотел убрать Найти! - не работает. Почему?
echo preg_replace("|Найти!|", "", $text); // 2. Хотел убрать Найти! - работает
echo preg_replace("[a-Z]", "", $text); // 3. Хотел убрать все буквы латиницы. Исчезли лишь некоторые. Получилось set=www&words=Человек&btnG=Найти!
echo preg_replace("|http|nova|", "", $text); // 4. Хотел убрать http и nova - не работает вообще. Почему?
| Можете объяснить, почему так? | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 14:34)
| | у preg есть отличия от ereg и одно из этих отличий заключается в том, что в preg вы должны ваше выражение "округлять" в два любых одинаковых символа, тоесть: "|Найти!|", здесь вы округлили в |
чтобы сработало такое выражение: "|http|nova|", легче всего использовать другой знак, вместо |, тоесть так: "/http|nova/" | |
|
|
|
|
|
|
|
для: nikita2206
(27.03.2009 в 15:23)
| | Это получилось, спасибо!
А почему не работает
echo "<br>3 ", preg_replace("[а-Я]", "", $text);
echo "<br>4 ", preg_replace("[a-Z]", "", $text);
|
Текст остается неизменным! | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 15:43)
| | вы округлить забыли;)
"|[а-Я]|" | |
|
|
|
|
|
|
|
для: nikita2206
(27.03.2009 в 15:45)
| | Не забыл, а с округлением работать не хочет!
Вот так
echo "<br>4 ", preg_replace("|[a-Z]|", "", $text);
| или вот так
echo "<br>4 ", preg_replace("/[a-Z]/", "", $text);
|
получаю сообщение:
Warning: preg_replace() [function.preg-replace]: Compilation failed: range out of order in character class at offset
|
Что неверно? | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 15:55)
| | нельзя ставить от маленькой a до большой Z....
суть в том, что символы в таблице ASCII расположены так, что с 65 по 90 идут символы крупного регистра, а с 97 по 122 нижнего регистра, поэтому если вы хотите заменить все буквы невзирая на регистр, то надо писать не |a-Z|, а |A-z|.... | |
|
|
|
|
|
|
|
для: nikita2206
(27.03.2009 в 16:04)
| | Похоже, что в книжке допущена некорректность.
Большое Вам спасибо! | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 16:13)
| | Есть какая-то специфика использования в образце знака вопроса?
Если требуется удалить вопросительный знак, то как это делается? | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 16:32)
| | ДА
(.?) - этот шаблон соответствует любому, одному, символу или ничему, тоесть ноль или одно вхождение...
пример:
$var1 = 'ABCabc';
$var2 = 123;
preg_match('/[A-z]?/', $var1); //Возвратит TRUE
preg_match('/[A-z]?/', $var2); //Возвратит тоже TRUE, т.к. ? - это одно или ноль вхождений...
(.+) - этот шаблон соответствует любому символу, в количестве от 1-го до бесконечности, тоесть 1 или более вхождений....
пример:
$var1 = 'ABCabc';
$var2 = 123;
preg_match('/[A-z]+/', $var1); // Возвратит TRUE
preg_match('/[A-z]+/', $var2); // Возвратит FALSE, т.к. в этой переменной меньше одной буквы
(.*) - этот шаблон будет соответствовать от 0 до бесконечности, то есть он включает в себя и + и ?
также ? используют для задания жадности(greedy) выражения.... | |
|
|
|
|
|
|
|
для: nikita2206
(27.03.2009 в 16:46)
| | Видимо, для удаления ? лучше использовать строковую функцию. Так? | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 17:04)
| | отвечу кратко:
<?
$var = 'Видимо, для удаления ? лучше использовать строковую функцию. Так?';
$var = preg_replace('|\?|', NULL, $var); // но намного быстрее будет использовоние str_replace
|
| |
|
|
|
|
|
|
|
для: nikita2206
(27.03.2009 в 17:07)
| | ОК! | |
|
|
|
|
|
|
|
для: nikita2206
(27.03.2009 в 15:45)
| | Да с этим "округлением" Вы, конечно, постарались - еще то извращение =) | |
|
|
|
|
|
|
|
для: ddhvvn
(27.03.2009 в 18:42)
| | Не могли бы Вы пояснить, что именно является "извращением" и как делается более корректно? | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 19:07)
| | да нет =))
я про само "название", выданное Никитой )
Было бы лучше сказать "ограничение".
Вот эти "символы, стоящие по краям" задают границы регулярного выражения. | |
|
|
|
|
|
|
|
для: Владимир55
(27.03.2009 в 14:34)
| | Подскажите как составить выражение для преобразования 1:13 => 01:13
Делал так, но не работает:
<?php
preg_replace('/^(\d{1})[:]([1-5]{1})(\d{1})/', '0\\1', $_POST['time_in_h'])
?>
|
| |
|
|
|
|
|
|
|
для: Keyses
(13.06.2009 в 19:36)
| | как запасной вариант(изврат, конечно)
<?
$_POST['time_in_h']="1:13";
(ereg ("([0-9]):([0-9]{1,2})", $_POST['time_in_h'], $regs));
$a=sprintf("%02d", $regs[1]);
echo $a.":".$regs[2];
?>
|
но, в первом приближении работает:) | |
|
|
|
|
|
|
|
для: vadimka
(13.06.2009 в 23:21)
| | Немного не то, регулярка составлена не верно для минут, там обязательно должен быть ведущий нуль. или же его тоже требуется подствлять.
А просто preg_replace() тут никак не обойтись разве? | |
|
|
|
|
|
|
|
для: Keyses
(14.06.2009 в 08:50)
| | убитая тема, надо делать новую, а так?
$_POST['time_in_h']='1:13';
$f=preg_replace("|(^[0-9])(:)([0-9]{2})$|e", "sprintf('%02d', $1).'$2$3'", $_POST['time_in_h']);
echo $f;
|
| |
|
|
|
|
автор: AcidTrash(кафе) (17.06.2009 в 13:26) |
|
|
для: Keyses
(13.06.2009 в 19:36)
| |
preg_replace('/^(\d{1}:)([1-5]{1,2})/', '0\\1\\2', $_POST['time_in_h'])
|
| |
|
|
|