Как составить регулярное выражение?

KW
На сайте с 04.12.2013
Offline
151
1433

Нужно удалить из массы текстов ссылки, в адресах которых числится слово /moscow/

Но другие ссылки в тексте, которые уже прописаны, чтобы не удалялись. Как это сделать? :)

Я нашел регулярку, но она выполнят видимо удаление всех ссылок в тексте

<a([\D\d\s]+)</a>

а нужно только тех где в URL содержится /moscow/

vandamme
На сайте с 30.11.2008
Offline
672
#1

Конструкция называется умеренная жадность (приблизительно)

https://regex101.com/r/RD7GfR/2

<a(?:(?!</?a>).)+?/moscow/.+?</a>
S
На сайте с 30.09.2016
Offline
469
#2

Хм... Наверное, лучше так

#<a[^>]+?/moscow/.+?</a>#is
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
KW
На сайте с 04.12.2013
Offline
151
#3

vandamme, сработала ваша конструкция :) Только надо чтобы в этом примере

https://regex101.com/r/RD7GfR/2

во всех результатах оставалось слово ссылка (в стартпосте я неточно описал задачу, удаление только ссылки но не текста внутри нее)..

MT
На сайте с 17.01.2017
Offline
22
#4

Find: #<a[^>]+href=['"][^'"]*\/moscow\/[^'"]*['"][^>]*>(.+?)<\/a>#is

Replace: $1

vandamme
На сайте с 30.11.2008
Offline
672
#5

KraftWerk, https://regex101.com/r/yiqNzR/1

моя версия

S
На сайте с 30.09.2016
Offline
469
#6

На мой взгляд, лучше такой вариант

preg_replace('#<a[^>]+?/moscow/.+?>(.+?)</a>#is', '$1', $txt);

Если я ничего не упустил.

vandamme
На сайте с 30.11.2008
Offline
672
#7

Sitealert, regex101 показывает у меня 1ms, у вас 2 :D

S
На сайте с 30.09.2016
Offline
469
#8

vandamme, проверьте у себя

<a href="/moscow/lalala" onclick='set()' >ссылка</a>
Да и первая ссылка в Вашем же примере не срабатывает. А по скорости - не спорю, может быть, у Вас и быстрее. Только чуток доработать надыть. :)

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