![]() |
|
Сайт 3DNews | Регистрация | Правила | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
![]() ![]() |
Опции темы | Опции просмотра |
![]() |
[включить плавающее окно] #1 | |
![]() Автор темы Регистрация: 08.02.2003
Адрес: Новосибирск
|
![]() $a = "[a][b]"; Нужно заменить [ и ] на ( и ) (на самом деле задача сложнее, поэтому подойдет только ereg_replace) Делаю так: $a = ereg_replace("(\[)(.*)(\])", '(\\2)', $a); В результате имею (a][b) Потому что .* берет наибольшее совпадение. Как сделать, чтобы бралось наименьшее совпадение?
__________________
Гайдар и другие экономисты поступили очень просто: представили потребности общества в виде решётки, а затем её сплющили. |
|
![]() |
![]() |
![]() |
[включить плавающее окно] #2 |
![]() Регистрация: 23.07.2003
Адрес: Брянск
|
.*?
По крайней мере на Perl'e реально работающий пример такой: $a =~ s/(\[)(.*?)(\])/(\2)/g; Последний раз редактировалось Simon Logic; 08.08.2004 в 15:00. |
![]() |
![]() |
![]() |
[включить плавающее окно] #3 |
![]() Автор темы Регистрация: 08.02.2003
Адрес: Новосибирск
|
Не работает. Вообще пустую строку выдает
![]()
__________________
Гайдар и другие экономисты поступили очень просто: представили потребности общества в виде решётки, а затем её сплющили. |
![]() |
![]() |
![]() |
[включить плавающее окно] #4 |
Опытный
Регистрация: 28.04.2004
|
CapOne либо использовать preg_replace() (он поддерживает нежадный режим), либо вместо .* написать [^\]]*
|
![]() |
![]() |
![]() |
[включить плавающее окно] #5 |
![]() Регистрация: 25.05.2004
Адрес: Moscow
|
Думаю эту тему мона закрепить наверху.... ибо проблемы с регами бывают очень часто.... я думаю было бы удобно постить проблемы связанные с регами в отдельный топик.... и название подходящее.....
|
![]() |
![]() |
![]() |
[включить плавающее окно] #6 |
![]() Автор темы Регистрация: 08.02.2003
Адрес: Новосибирск
|
[^\]]* — До этого я уже сам догадался, но так не пойдет. Я делаю что-то вроде форумных тегов ([b ]qqq[/b ] и т. п.).
Как сделать preg_replace "нежадным"?
__________________
Гайдар и другие экономисты поступили очень просто: представили потребности общества в виде решётки, а затем её сплющили. |
![]() |
![]() |
![]() |
[включить плавающее окно] #7 |
Опытный
Регистрация: 28.04.2004
|
CapOne вопросом - .*?
|
![]() |
![]() |
![]() |
[включить плавающее окно] #8 |
![]() Автор темы Регистрация: 08.02.2003
Адрес: Новосибирск
|
С вопросом не работает ни ereg, ни preg (кстати, в чем разница?).
$buffer = ereg_replace('(\[url=)(.*)(\])(.*)(\[\/url\])','<a href="\\2">\\4</a>',$buffer); работает, но жадно $buffer = preg_replace('(\[url=)(.*)(\])(.*)(\[\/url\])','<a href="\\2">\\4</a>',$buffer); $buffer = ereg_replace('(\[url=)(.*?)(\])(.*?)(\[\/url\])','<a href="\\2">\\4</a>',$buffer); $buffer = preg_replace('(\[url=)(.*?)(\])(.*?)(\[\/url\])','<a href="\\2">\\4</a>',$buffer); не работают: выдают пустую строку
__________________
Гайдар и другие экономисты поступили очень просто: представили потребности общества в виде решётки, а затем её сплющили. Последний раз редактировалось CapOne; 09.08.2004 в 10:47. |
![]() |
![]() |
![]() |
[включить плавающее окно] #9 |
Опытный
Регистрация: 28.04.2004
|
для preg_replace выражение надо заключать в разделители, обычно /, т. е.
$buffer = preg_replace('/(\[url=)(.*?)(\])(.*)(\[\/url\])/','<a href="\\2">\\4</a>',$buffer); |
![]() |
![]() |
![]() |
[включить плавающее окно] #10 |
![]() Автор темы Регистрация: 08.02.2003
Адрес: Новосибирск
|
Заработало.
Спасибо.
__________________
Гайдар и другие экономисты поступили очень просто: представили потребности общества в виде решётки, а затем её сплющили. |
![]() |
![]() |
![]() |
[включить плавающее окно] #11 |
Опытный
Регистрация: 28.04.2004
|
CapOne не за что
|
![]() |
![]() |
![]() |
[включить плавающее окно] #12 |
![]() Регистрация: 18.03.2005
|
Цитата
(Johnnie Walker) »
для preg_replace выражение надо заключать в разделители, обычно /, т. е.
$buffer = preg_replace('/(\[url=)(.*?)(\])(.*)(\[\/url\])/','<a href="\\2">\\4</a>',$buffer); ![]() |
![]() |
![]() |
![]() |
[включить плавающее окно] #13 |
![]() Регистрация: 21.03.2006
|
А я бы на Perlе бы написал! Там более логично и не так запутано как в PHP! А еще говорят, что PHP для новичков и он легче в изучении! К тому же Perl на порядок быстрее работает!
|
![]() |
![]() |
![]() |
[включить плавающее окно] #14 |
![]() Регистрация: 21.03.2006
|
Ну вот и пиши на Perle!
|
![]() |
![]() |
![]() |
[включить плавающее окно] #15 |
![]() Регистрация: 21.03.2006
|
А вообще лучше забить на все и гулять с девченками!
|
![]() |
![]() |
![]() |
[включить плавающее окно] #16 |
![]() Регистрация: 16.02.2004
|
в конце regmatch-строки можно поставить |U - модификатор не-жадности
![]() Цитата
...
U (PCRE_UNGREEDY) This modifier inverts the "greediness" of the quantifiers so that they are not greedy by default....
__________________
Как бы стремительно индустрия не развивалась, а компы тормозить будут всегда !!! |
![]() |
![]() |
![]() |
[включить плавающее окно] #17 |
![]() Регистрация: 25.05.2004
Адрес: Moscow
|
ewafr-bedrin perl работает не быстрее.... в пхп уже давно перл-совместимые регулярные выражения....
|
![]() |
![]() |
![]() |
[включить плавающее окно] #18 |
![]() Регистрация: 28.05.2008
|
а str_repalce чем тут не подходит?
|
![]() |
![]() |
![]() |
[включить плавающее окно] #19 |
![]() Регистрация: 08.09.2010
|
Цитата
(CapOne) »
Заработало.
Спасибо. но хорошо, что и на этом форуме есть гуру php Последний раз редактировалось radar-1986; 08.09.2010 в 14:45. |
![]() |
![]() |