Как impliment ИЛИ здесь, чтобы соответствовать meta
с обоими name
и property
preg_match мета имя или свойство
$html = '<meta name="title" content="title here..">
<meta name="keywords" content="keywords here..">
<meta property="og:title" content="og title here..">'
preg_match_all('/<[\s]*meta[\s]*name="?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $html, $match);
выход
Array
(
[0] => Array
(
[0] => <meta name="title" content="title here..">
[1] => <meta name="keywords" content="keywords here..">
// [2] <meta property="og:title" content="og title here..">
)
[1] => Array
(
[0] => title
[1] => keywords
// [2] => og:title
)
[2] => Array
(
[0] => title here..
[1] => keywords here..
// [2] => og title here..
)
)
Вы должны использовать синтаксический анализатор, но в регулярном выражении есть 'или'. Вы смотрели какие-то документы? http://www.regular-expressions.info/alternation.html – chris85
@ chris85 предпочитает парсер, чем регулярное выражение? – TheMonkeyKing
Да, с парсером вам не нужно беспокоиться о пробеле, порядке атрибутов, типе значений типа инкапсуляции значений атрибутов и т. Д. Если это вопрос только регулярного выражения, я думаю, что моя предыдущая ссылка должна ответить на это. Однако HTML/XML не предназначены для обработки с помощью регулярных выражений. – chris85