Your regex <meta|name="description|".*content|="([^"]+)">
is broken, it means:
<meta
OR
name="description
OR
"
followed by anything followed by content
OR
="
followed by at least one character that is not "
followed by ">
Warning!
Let me say that parsing HTML with regular expressions is a very bad idea.
Regex alternative for training purposes
But if you want to try something out for training, start improving this:
#<meta name="description" content="([^"]+)">#i
which is case-insensitive and does what you think it does.
False negatives
Beware that it won't match valid elements like this:
<meta name="description" content="foo bar baz">
or
<meta
name="description"
content="foo bar baz">
or
<meta content="foo bar baz" name="description">