удалить определенный формат тега из HTML с помощью регулярных выражений - PullRequest
0 голосов
/ 24 марта 2012

предположим, у меня есть эта строка:

some striinnngggg <a href="something/some_number">linkk</a> soooo <a href="someotherthing/not_number">asdfsadf</a>

Я хочу удалить теги из этой строки, которая содержит формат тега <a href="something/some_number"></a> без удаления содержимого этого тега, где some_number может быть любым числом

Следовательно, в приведенном выше примере желаемые конечные результаты равны

some striinnngggg linkk soooo <a href="someotherthing/not_number">asdfsadf</a>

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

как бы мне этого добиться, используя preg-функции regex / php

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

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

Я думаю, что более простой способ сделать это - использовать DOMDocument для поиска подходящих тегов:

$dom = new DOMDocument;
$dom->loadHTML($html);

$links = $dom->getElementsByTagName('a');

foreach ($links as $link) {
  if (preg_match("/[a-zA-Z0-9]+\/[0-9]+/", $link->getAttribute('href'))) {
    echo $link->nodeValue; // do whatever you need to do with the string here
  }
}
1 голос
/ 24 марта 2012

Выражение:

(<a.+?href=".*?\d.*?".*?>)(.+?)(</a>)

Найдите его и замените вторым токеном (в зависимости от вашего языка это может быть $2 или \1 или \2), который является просто текстом ссылки.

...