Попробуйте это регулярное выражение:
'~<div\b[^>]*>Corporate\s+Officers</div>\s*<div\b[^>]*>(?:<(?!/?div\b)[^>]*>|\s+)*\K[^<]+~'
Это основано на предположении, что в HTML нет другого текстового содержимого между открывающими тегами <div>
и именами, которые вы ищете.Первая часть не требует пояснений:
<div\b[^>]*>Corporate\s+Officers</div>\s*<div\b[^>]*>
Я предполагаю, что текст «Корпоративные сотрудники» достаточен для определения начальной точки, но при необходимости вы можете повторно вставить атрибуты class
.После этого
(?:<(?!/?div\b)[^>]*>|\s+)*
... потребляет любое количество тегов, отличных от тегов <div>
или </div>
, а также любые промежуточные пробелы.Затем \K
приходит и говорит забудьте все это, реальный матч начинается здесь .[^<]+
потребляет все до начала следующего тега, и это все, что вы видите в результатах матча.Как будто все до \K
было действительно позитивным взглядом, но без всех ограничений.
Вот демо .