Знатокам регулярных выражений

12 3
M
На сайте с 20.08.2004
Offline
376
1094

Подскажите пожалуйста, есть куча картинок и ссылок от пользователей с разных сайтов, в том числе с моего. Вот такого вида

что-то

надо удалить все теги (те ссылки на сайты) кроме своего списка!
Подскажите пожалуйста как это сделать правильно.
Спасибо.

отец сыночка, лапочки дочки и еще одного сыночка
siv1987
На сайте с 02.04.2009
Offline
427
#1

Где нормальный шаблон текста? Мы должны гадать что теги url и картинок у вас там в тексте?

'#\(.*?)\[/url\]#'
M
На сайте с 20.08.2004
Offline
376
#2

я пробовал так

\([\S\]\[]*)\[\/url\]

пробелы после открывающейся кавычки надо убрать.


1.[ url=http://zzzz.ru]http://zzzz.ru/one.html[ /url]
2.[ url=http://aaaa.ru]молоко[ /url]
3.[ url=http://www.zzzz.ru/]http://zzzz.ru/one.html[ /url]
4.[ url=http://zzzz.ru/index.php]
siv1987
На сайте с 02.04.2009
Offline
427
#3
Miracle:
я пробовал так

Можно и так, только в анкоре могут быть и пробельные символы.


$allow = array('mysite2.org.ru', 'mysite1.com');

$allow = str_replace('.', '\.', implode('|', $allow));
$str = preg_replace('#\?https?://(?!(www\.)?('.$allow.'))\S*[\"\']?\](.*?)\[/url\]#', '', $str);
M
На сайте с 20.08.2004
Offline
376
#4

спаибо.

1. нужно все что между тегами
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так



но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=", и оставить полностью /\?https?:\/\/(www\.)?(?!([mysite1\.com]|[www.mysite2\.com]))\S*[\"\']?\](.*?)\[\/url\]/g

но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank">, и оставить полностью /\?https?:\/\/(www\.)?(?!([mysite1\.com]|[www.mysite2\.com]))\S*[\"\']?\](.*?)\[\/url\]/g

но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" оставить если это "левые"
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=", и оставить полностью /\?https?:\/\/(www\.)?(?!([mysite1\.com]|[www.mysite2\.com]))\S*[\"\']?\](.*?)\[\/url\]/g

но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank">, и оставить полностью /\?https?:\/\/(www\.)?(?!([mysite1\.com]|[www.mysite2\.com]))\S*[\"\']?\](.*?)\[\/url\]/g

но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> оставить если это "левые"
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=", и оставить полностью /\?https?:\/\/(www\.)?(?!([mysite1\.com]|[www.mysite2\.com]))\S*[\"\']?\](.*?)\[\/url\]/g

но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank">, и оставить полностью /\?https?:\/\/(www\.)?(?!([mysite1\.com]|[www.mysite2\.com]))\S*[\"\']?\](.*?)\[\/url\]/g

но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" title=" и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
" target="_blank"> и содержимое если это разрешенные сайты
2. тест 4 у вас не работает так же как и у меня!

спасибо за помощь

---------- Добавлено 31.01.2015 в 09:53 ----------

и, наверное правильней будет все же вот так


но не понятно что делает вот это



---------- Добавлено 31.01.2015 в 09:56 ----------

понял, это обычное НЕ в патерне!
siv1987
На сайте с 02.04.2009
Offline
427
#5
Miracle:
и, наверное правильней будет все же вот так

[mysite1\.com] - ни разу не правильней.

Miracle:
1. нужно все что между тегами оставить если это "левые"

Тогда придется юзать callback, один регулряным выражением заменой по условию не составить.

Miracle:
тест 4 у вас не работает так же как и у меня!

Все там работает. Главное что понимать по "не работает".

---------- Добавлено 31.01.2015 в 16:58 ----------


$allow = array('mysite2.org.ru', 'mysite1.com');

$str = preg_replace_callback('#\?https?://(?:www\.)?([^/\]]+)\S*[\"\']?\](.*?)\[/url\]#',
function($m) use($allow){
if(in_array($m[1], $allow)){
return $m[0];
}
return $m[2];
}, $str);
M
На сайте с 20.08.2004
Offline
376
#6
siv1987:
Тогда придется юзать callback, один регулряным выражением заменой по условию не составить.

сейчас с дочкой математику делаю, полноценно ответить не могу, пошла за линейкой )

но я думаю что это решается через preg_match

спасибо за ответ

siv1987
На сайте с 02.04.2009
Offline
427
#7
Miracle:
но я думаю что это решается через preg_match

Решается это обычным колбэком кой пример есть выше.

M
На сайте с 20.08.2004
Offline
376
#8

4 тест так и не проходит )

---------- Добавлено 31.01.2015 в 15:46 ----------

жадность фраера сгубила

\?https?://(?:www\.)?([^/\]]+)\S*?[\"\']?\](.*?)\[/url\]

и четвертый тест пройден

---------- Добавлено 31.01.2015 в 15:50 ----------

ну а это уже и семантически правильно.

siv1987
На сайте с 02.04.2009
Offline
427
#9
Miracle:
4 тест так и не проходит )

Что значит "не проходит"? Что он должен пройти я так и не понял.

Miracle:
жадность фраера сгубила

Да, там нужен инвертор жадности. Хотя логически должно работать и без него, врядли есть вложенные теги url, а с "без пробельных символов" он много не захватит.

ПС. Понял, тут нет кавычек, а без ковычек с "жадностью" захватит до последней закрывающей квадратной скобки, которой здесь является тег img.

Miracle:
ну а это уже и семантически правильно.

Это что вообще такое?

M
На сайте с 20.08.2004
Offline
376
#10

https?:\/\/ против https?://

---------- Добавлено 31.01.2015 в 16:33 ----------

очень хорошо помогают вот эти сервисы

http://regexr.com/ первый нагляднее регулярное выражение

https://regex101.com/ во втором лучше результат, хотя в первом тоже хороший.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий