あなたのコード
$matches = array();
$search="domain.com";
preg_match('|(<a\s*[^>]*href=[\'"]?)|',$prod['value'],$matches);
echo '<p>'.$matches[1].'</p>';
まず、呼び出し$matchesの前に定義する必要はありません。preg_match変数名を指定するだけで、通知PHPをスローすることはありません。
第二に$search、質問に関連していないようです?..
3番目...入力例を示していないことを念頭に置いて、入力からすべてのリストを取得できるように、実際に必要であると仮定します。preg_match_allURLs
4 つ目は、3 つに続いて、 のコンテンツとしてvar_dumporprint_rの代わりにが必要であることを意味します。echo$matches[X]array
正規表現
さて、正規表現パターンが実際に行うことについて...
(<a\s*[^>]*href=['"]?)
(- キャプチャ グループを開始します
<a\s*- 0 個以上の空白文字<aが続く一致
[^>]*- ではない0 個以上の文字に一致>
href=- マッチhref=
['"]?- オプションで、'または"
)- キャプチャ グループを終了します
これはすべて、例の入力に対して実行すると、正規表現が<a href="最初のリンクの例 (google) と<a class="fancyStyle" href="2 番目のリンクの例 (youtube) から一致することを意味します。
/**
Output from:
preg_match_all('|(<a\s*[^>]*href=[\'"]?)|', $string, $matches);
var_dump($matches);
*/
array(2) {
[0]=>
array(2) {
[0]=>
string(9) "<a href=""
[1]=>
string(28) "<a class="fancyStyle" href=""
}
[1]=>
array(2) {
[0]=>
string(9) "<a href=""
[1]=>
string(28) "<a class="fancyStyle" href=""
}
}
作業コード
コードにはいくつかの問題がありますが、期待どおりの結果を得るのを妨げているのは、到達する前にURLキャプチャを停止することです。
次の正規表現は、タグの属性URL内にある に一致します。hrefa
#<a\s.*?(?:href=['"](.*?)['"]).*?>#is
説明
<aa-タグの開始に一致
\s.*?-任意の文字が0回以上続く空白文字に一致します
(?:- 非キャプチャ グループを作成します
href=- マッチhref=
['"]'- またはのいずれかに一致"
(.*?)- キャプチャ グループを作成し、前に0 個以上の文字を一致させます...
['"]- 一致'または"
)- 非キャプチャ グループを終了します
.*?>- 任意の文字に 0 回以上一致し、その後に続く>
i- 正規表現の大文字と小文字を区別しないようにします
s-.すべての文字に一致させます (改行を含む)
実施例
preg_match_all('#<a\s.*?(?:href=[\'"](.*?)[\'"]).*?>#is', $string, $matches);
var_dump($matches);
/**
array(2) {
[0]=>
array(2) {
[0]=>
string(34) "<a href="http://www.google.co.uk">"
[1]=>
string(65) "<a class="fancyStyle" href="http://www.youtube.com" id="link136">"
}
[1]=>
array(2) {
[0]=>
string(23) "http://www.google.co.uk"
[1]=>
string(22) "http://www.youtube.com"
}
}
*/
入力例
すべてのコードは、preg_match関数への入力として以下を使用します...
$string = <<<EOC
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title of page</title>
</head>
<body>
<h1>Main Page title</h1>
<p>
The following is a <a href="http://www.google.co.uk">link to google</a>.
This is <a class="fancyStyle" href="http://www.youtube.com" id="link136">another link</a>
</p>
</body>
</html>
EOC;