X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> regexp
unnormal
unnormal
Topic Starter сообщение 7.9.2010, 16:23; Ответить: unnormal
Сообщение #1


Нужно изменить ссылки если скрипт находится в поддеректории:

[php]$content = preg_replace("#(href|src|action)=\"(.*)\"#is", "$1=\"".SUB."$2\"", ob_get_contents());[/php]
SUB - заранее определённый подкаталог
Немного запулался, как избавиться чтобы не заменяло ссылки вида action="" и href="javascript:... ?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexflasher
alexflasher
сообщение 8.9.2010, 1:02; Ответить: alexflasher
Сообщение #2


объясните по-подробнее на примере, имеется такой-то текст, в нем необходимо изменить то-то на то-то. Лично я не понял, что требуется и что имеется.

P.S:
Что-то я подзабыл что означает #, а гуглить - лень. Может вы напомните? )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 8.9.2010, 9:18; Ответить: Arks
Сообщение #3


распишите условия отдельно т.к. с ИЛИ использовать не получится(например если вам надо чтобы action="" не заменяло а src="" заменяло сами подумайте), для action соответственно будет квантификатор (.+) для href условие в начале ^javascript как-то так...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
unnormal
unnormal
Topic Starter сообщение 8.9.2010, 12:02; Ответить: unnormal
Сообщение #4


(alexflasher @ 8.9.2010, 04:02) *
объясните по-подробнее на примере, имеется такой-то текст, в нем необходимо изменить то-то на то-то. Лично я не понял, что требуется и что имеется.

P.S:
Что-то я подзабыл что означает #, а гуглить - лень. Может вы напомните? )

Если скрипт находиться в подкаталоге, то изменить все ссылки из буфера.
Чтобы <a href="/section/"> менялись на <a href="/subdir/section/">, но не изменять action="" и href="javascript:....
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 8.9.2010, 14:01; Ответить: Mulder_hb
Сообщение #5


'/(href|src|action)="([^javascipt])+"/is'

Как то так. Возможно порядок скобок не так стоит или скобки тут нужны/не нужны. Проверить возможности нет. Смысл в том, что вам нужно изменить все непустые ссылки и все ссылки, где нет слова javascript. Шаблон "непустые" обеспечивает символ '+', т.е. в ссылке должен быть минимум один символ. Ну а [^javascipt] - это отрицательный класс, т.е. в скобках должно находится что-угодно, кроме слова javascript.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexflasher
alexflasher
сообщение 8.9.2010, 15:11; Ответить: alexflasher
Сообщение #6


(Mulder_hb @ 8.9.2010, 17:01) *
Ну а [^javascipt] - это отрицательный класс, т.е. в скобках должно находится что-угодно, кроме слова javascript.

[^javascipt] - это отрицательный класс, т.е. в скобках будет находится что-угодно, кроме символов j,a,v, s, c, r, i, p или t. ([^javascipt])+ конечно исключит слово javascript, но оно также исключит слова vasa, spirt и многие другие.

Я предложу очень простое решение. Как сказал Mulder, нужно изменить все непустые ссылки и все ссылки, где нет слова javascript. Я бы дополнил так:
нужно изменить все непустые ссылки, не абсолютные ссылки (т.е. http://site.com исключить) и все ссылки, где нет слова javascript: (именно с двоеточием).

Что отличает название каталога от javascript: и http://site.com? Двоеточие, насколько мне известно, оно недопустимо в каталогах. Тогда получаем это:
$string = "href=\"sometext/\">";
$sub = "../sub";
$pattern = "/(href|src)=\"(\/?\w+?\/?\">)/i";
$replacement = "$1=\"" . $sub . "$2";
echo preg_replace($pattern, $replacement, $string);
\w отбросит ссылки с двоеточиями.


Если же двоеточия не внушают вам доверия, то можно привязаться к слэшам:
$string = "href=\"/dfsf/\">";
$sub = "../sub";
$pattern = "/(href|src)=\"(\/.+?\/\">)/i";
$replacement = "$1=\"" . $sub . "$2";
echo preg_replace($pattern, $replacement, $string);


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 29.3.2024, 18:18
Дизайн