![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
V0fka |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Привет!
Есть строка вида:
Мне нужно проверить, что в строке содержится [tag...] [/tag...], после этого обработать строку внутри и заменить это на [myReplaceTag]Новый текст: qwe[/myReplaceTag]. На данном этапе проблема в том, что не могу определить, что строка содержит то, что мне нужно. Написал регулярное выражение для поиска тегов. Выглядит оно так: \[tag(\d+?)\](.*?)\[/tag(\1)\] . На одном из онлайн "проверяльщиков" проверил, работает нормально. Вставляю строку в скрипт:
Но она возвращает 0, вместо 4, как я ожидаю и как мне показывает "проверяльщик". Подскажите, пожалуйста, что не так? |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Нужно вместо \1 писать \\1. Это такое доброе чудо от php, `двойные кавычки` называется. Некоторые слеши нужно удвоять, некоторые учетверять...
Можно заменить двойные на одинарные, так таких чудес можно избежать, но не всегда ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Спасибо, заработало!
А про эти приколы можно где-то почитать: где надо заменять, где не надо, где на 2, где на 4? |
|||
|
||||
igorold |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 22.12.2005 Где: Россия->Урал-& gt;Миасс Репутация: нет Всего: 17 |
что означает \1 ??? чем это отличается от 1
может вы хотели написать \d Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
igorold |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 22.12.2005 Где: Россия->Урал-& gt;Миасс Репутация: нет Всего: 17 |
||||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
http://php.net/manual/ru/regexp.reference.escape.php
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
В основном - метод научного тыка. ![]() В описаниях регулярок на php.net стоит поискать двойные слеши и посмотреть в каких случаях они используются. Нужно стараться использовать одинарные кавычки где это возможно, просто для минимизации странных явлений. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
igorold |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 22.12.2005 Где: Россия->Урал-& gt;Миасс Репутация: нет Всего: 17 |
||||
|
||||
V0fka |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
ksnk, под "использовать одинарные кавычки" вы имеете ввиду вместо
писать
? |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
V0fka, Да.
Можно еще немного сократить регулярку, из эстетических соображений.
Убран вопросик после \d+? так как жадного \d просто не бывает и выкинута захватывающая маска вокруг финального \1, так как его значение на самом деле уже известно. Можно еще на байт сократить регулярку, если начать ее не со слеша, а с другого символа, но это пусть останется как задание на дом ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
V0fka |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Ясно, спасибо!
Спасибо!
В одной из моих предыдущих тем _zorn_ посоветовал вместо / использовать #, мне это понравилось и я теперь стараюсь использовать решетку. Но просто сайт, на котором я регулярки проверяю обрамляет итоговое выражение слешами. Ну я оттуда сюда так и копипастю. ![]() В общем, вопрос вроде как решен. ksnk, спасибо за помощь! |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Решенные вопросы отмечаются специальной кнопкой `Пометить как решенный` в заголовке темы. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |