С помощью регулярного выражения выбрать всё, кроме определенных слов
Имеется html-документ, который содержит якоря:
$html = <<<aaa
<a name="aaaa"></a>
...
<a name="bbbb"></a>
...
<a name="cccc"></a>
...
<a name="dddd"></a>
...
<a name="eeee"></a>
aaa;
Необходимо с помощью регулярного выражения выбрать все якоря, кроме тех, чьи имена равны "bbbb" и "cccc".
Как для этой задачи прописать шаблон ($pattern) для функции
preg_match_all($pattern, $html, $matches)
Что-то вроде:
$pattern = "/<a name=\"^(bbbb|ccc)\"><\/a>/";
Ожидаю получить массив следующих строк:
'<a name="aaaa"></a>'
'<a name="dddd"></a>'
'<a name="eeee"></a>'
Ответы (2 шт):
Автор решения: ksa
→ Ссылка
Необходимо с помощью регулярного выражения выбрать все якоря, кроме тех, чьи имена равны "bbbb" и "cccc".
Предложу такой вариант...
const v = `<a name="aaaa"></a>
...
<a name="bbbb"></a>
...
<a name="cccc"></a>
...
<a name="dddd"></a>
...
<a name="eeee"></a>`
const r = /<a\sname="(?!bbbb|ccc).+?<\/a>/g
console.log(v.match(r))
Автор решения: abu
→ Ссылка
<?php
$html = <<<aaa
<a name="aaaa"></a>
...
<a name="bbbb"></a>
...
<a name="cccc"></a>
...
<a name="dddd"></a>
...
<a name="eeee"></a>
aaa;
$excludes = [
'bbbb',
'cccc'
];
$template = sprintf('/<a name="(?!%s).*?>.*?<\/a>/', implode('|', $excludes));
preg_match_all($template, $html, $matches);
var_dump($template, $matches);