Regex: Как распознать строку, только если она находится внутри идентификатора или атрибута класса? - PullRequest
0 голосов
/ 12 марта 2019

Давайте использовать 3 строковых примера:

Пример 1:

<div id="something">I have a really nice signature, it goes like this</div>

Пример 2:

<div>I like balloons</div><div id="signature-xyz">Sent from my iPhone</div>

Пример 3:

<div>I like balloons</div><div class="my_signature-xyz">Get iOS</div>

Я хотел бы удалить все содержимое div "signature" в примерах 2 и 3. На пример 1 это не должно повлиять.Я не знаю заранее, какой будет точный класс или идентификатор div, но я знаю, что он будет содержать строку «signature».

Я использую приведенный ниже код, который дает мнепочти на месте.

$pm = "/signature/i";
 if (preg_match($pm, $message, $matches) == 1) {
        $message = preg_split($pm, $message, 2)[0];
    }

Что я должен сделать, чтобы достичь вышеуказанного?Спасибо

1 Ответ

2 голосов
/ 12 марта 2019

Вы можете использовать следующий пример для создания своего кода на нем:

$dom = new DOMDocument();
$dom->loadHTML($inputHTML);
$xpathsearch = new DOMXPath($dom);
$nodes = $xpathsearch->query("//div[not(contains(@*,'signature'))]");

foreach($nodes as $node) {
    //do your stuff
}

Где xpath:

//div[not(contains(@*,'signature'))]

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

Regex никогда не должен использоваться при разборе HTML / XML / JSON, где вы можете имеют теоретически бесконечную вложенную глубину в структуре. Ref: Регулярное выражение против Разбор строки

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