Регулярное выражение PHP с кавычками

Я хочу сопоставить все значения href в моем содержании страницы. Я написал regex для этого и протестировал его на regex101

href[ ]*=[ ]*("|')(.+?)\1 

Это находит все мои значения href правильно. Если я использую

 href[ ]*=[ ]*(?:"|')(.+?)(?:"|') 

его еще лучше, так как мне не нужно использовать определенную группу позже.

С помощью строки «и» в строке регулярного выражения я не могу правильно запустить регулярное выражение с помощью

 $matches = array(); $pattern = "/href[ ]*=[ ]*("|')(.+?)\1/"; // syntax error $numOfMatches = preg_match_all($pattern, $pattern, $matches); print_r($matches); 

Если я «убегу» на двойную кавычку и, таким образом, исправляю синтаксическую ошибку, я не получаю совпадений.

Итак – каков правильный способ применения данного регулярного выражения в PHP?

Спасибо за любую помощь

Заметки:

  • addslashes или preg_quote не поможет, поскольку мне нужно сначала передать законную строку
  • избегая всех специальных символов \ + * ? [ ^ ] $ ( ) { } = ! < > | : - \ + * ? [ ^ ] $ ( ) { } = ! < > | : - \ + * ? [ ^ ] $ ( ) { } = ! < > | : - не помогло ни

EDIT : Хорошо, я вижу, я действительно не должен делать это с регулярным выражением. Не могли бы вы предоставить некоторые полезные DOM-парсеры или любой другой инструмент, который я должен использовать с PHP?