Попытка выяснить регулярное выражение дает мне судороги мозга:)
Я заменяю тысячи отдельных ссылок href
с помощью отдельного короткого кода в постсоветском контенте WordPress, используя плагин, который позволяет запускать регулярные выражения для контента.
Вместо того, чтобы пытаться объединить SQL-запрос с RegEx, я делаю это в два этапа: сначала SQL, чтобы найти/заменить каждый отдельный URL-адрес на отдельный короткий код, а второй этап - удалить остальную часть ' href` link.
Вот некоторые примеры того, что у меня есть с первого шага; как вы можете видеть, URL-адрес был заменен коротким кодом [nggallery id=xxx]
.
<a href="[nggallery id=xx]"><span class="shutterset">
<img class="alignnone size-large wp-image-23067" title="Image Title"
src="http://example.com/wp-content/uploads/2015/06/image-title.jpg"
alt="" width="685" height="456" /></span></a>
<a href="[nggallery id=xxxxx]">Click here!</a>
<a title="title title" href="[nggallery id=xxx]" target="_blank">Title Link Title Link</a>
Теперь мне нужно удалить все разметки ссылок href
- span
, img
и т.д. между ведущими <a
и заканчивающимися </a>
, оставив только короткий код [nggallery id=xxx]
.
У меня есть начало здесь: https://www.regex101.com/r/rL8wP1/2
Но я не знаю, как предотвратить использование [nggallery id=xxx]
короткого кода в RegEx.
Обновление 7/09/2015
@nhahtdh ответ, кажется, работает отлично, не слишком жадный и не ест соседние ссылки html. Используйте (
и )
как разделители и $1
в качестве замены плагином regex в WordPress. (Если вы используете BBEdit, вам нужно будет использовать \1
)
( <a\s[^>]*"(\[nggallery[^\]]*\])".*?<\/a> )
Обновление 7/02/2015
Спасибо Fab Sa (ниже), его регулярное выражение https://www.regex101.com/r/rL8wP1/4
<a.*(\[nggallery[^\]+]*\]).*?<\/a>
работает в эмуляторе regex101, но при использовании в текстовом редакторе BBEdit или плагине WordPress, который запускает регулярное выражение, его регулярное выражение удаляет короткий код [nggallery id=***]
. Так это слишком жадно? Некоторые другие проблемы?
Обновление 7/01/2015:
Я знаю, я знаю, re: RegEx сопоставляет открытые теги, кроме XHTML автономных тегов ВЫ НЕ МОЖЕТЕ ПОВТОРИТЬ HTML С REGEX