Не могу справиться с регуляркой для поиска html тега
Есть вот такой код
<label class="col-sm-2 control-label" for="input-unit_border_active_color"><?= $entry_border_active_color ?></label><div class="col-sm-10"><input data-mark="<?= $mark ?>" size="60" type="text" name="unit_border_active_color" value="<?= $border_active_color ?>"></div>
Не получается написать регулярку, которая сможет извлечь весь тег по слову unit_border_active_color. Регулярка <(|'[^']*'|[^'">])*> возвращает любые валидные теги, а мне нужен только один,в котором есть последовательностьunit_border_active_color. Я не знаю как добавить исключение в эту регулярку, чтобы результат был такой:
<input size="60" type="text" name="unit_border_active_color" value="<?= $border_active_color ?>">
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Для вашего случая, в PHP регулярное выражение и код будут такими:
$re = '/.*?(<input[\s\S]*\bunit_border_active_color\b[\s\S]*>)(?=<).*/mi';
$str = '<label class="col-sm-2 control-label" for="input-unit_border_active_color"><?= $entry_border_active_color ?></label><div class="col-sm-10"><input data-mark="<?= $mark ?>" size="60" type="text" name="unit_border_active_color" value="<?= $border_active_color ?>"></div>';
echo htmlspecialchars(preg_replace($re, '$1', $str), ENT_QUOTES);
Рабочий пример на JS:
let rExp = /.*?(<input[\s\S]*\bunit_border_active_color\b[\s\S]*>)(?=<).*/gim;
let sHtml = `<label class="col-sm-2 control-label" for="input-unit_border_active_color"><?= $entry_border_active_color ?></label><div class="col-sm-10"><input data-mark="<?= $mark ?>" size="60" type="text" name="unit_border_active_color" value="<?= $border_active_color ?>"></div>`;
console.log(sHtml.replace(rExp, '$1'));