匹配网页内容的网址的正则
我希望把这个网址http://www.425sf.com/的网址都匹配出来
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> $url = "http://www.425sf.com/";//采集地址 $content = file_get_contents($url); $patten = "^((https|http|ftp|rtsp|mms)?://)?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; preg_match_all($patten, $content, $matches);
$html = <<<html skjdfksjdkf <a href="http://www.baidu.com" id="abc">sdfjk</a> <a href="http://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a> html; $r = '/<a[^href]*href="([^"]*)"/i'; preg_match_all($r, $html, $a); echo '<pre class="brush:php;toolbar:false">';print_r($a[1]); /* Array ( [0] => http://www.baidu.com [1] => http://hi.baidu.com?info=aaa ) */ <br><font color="#e78608">------解决方案--------------------</font><br>LS正解:<br><br><br>preg_match_all<br>(PHP 4, PHP 5)<br><br>preg_match_all ― 进行全局正则表达式匹配<br><br>说明<br>int preg_match_all ( string $pattern , string $subject , array $matches [, int $flags ] )<br>在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。 <br><br>搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。 <br><br>flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义): <br><br>PREG_PATTERN_ORDER <br>对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。 <br><br><br><?php<br />preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",<br> "<b>example: </b><div align=left>this is a test</div>",<br> $out, PREG_PATTERN_ORDER);<br>print $out[0][0].", ".$out[0][1]."\n";<br>print $out[1][0].", ".$out[1][1]."\n";<br>?> <br>本例将输出: <br><br><b>example: </b>, <div align=left>this is a test</div><br>example: , this is a test<br>因此,$out[0] 包含匹配整个模式的字符串,$out[1] 包含一对 HTML 标记之间的字符串。 <br><br><br>PREG_SET_ORDER <br>对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。 <br><br><?php<br />preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",<br> "<b>example: </b><div align=left>this is a test</div>",<br> $out, PREG_SET_ORDER);<br>print $out[0][0].", ".$out[0][1]."\n";<br>print $out[1][0].", ".$out[1][1]."\n";<br>?> <br>本例将输出: <br><br><b>example: </b>, example:<br><div align=left>this is a test</div>、これはテストです<br><br>この例では、$matches[0] は一致結果の最初のセットで、$matches[0][0] にはパターン全体に一致するテキスト $matches[0] が含まれます。 ][1 ] には、最初のサブパターンに一致するテキストが含まれます。同様に、$matches[1] は 2 番目の一致セットであり、以下同様です。 <br><br>PREG_OFFSET_CAPTURE <br>このフラグが設定されている場合、各一致結果に関連付けられた文字列オフセットも返されます。これにより、返された配列の値が変更され、その中の各セルも配列になることに注意してください。最初の項目は一致した文字列で、2 番目の項目はサブジェクト内のそのオフセットです。このタグは PHP 4.3.0 以降で使用できます。 <br><br><br>タグが指定されていない場合は、PREG_PATTERN_ORDER が想定されます。 <br><br>パターン全体が一致した回数 (おそらくゼロ) を返し、エラーが発生した場合は FALSE を返します。 <br><br><br>例 1 テキストからすべての電話番号を取得する<br><br><?php<br />preg_match_all ("/(? (d{3})? )? ( ?( 1) [-s] ) d{3}-d{4}/x",<br /> "555-1212 または 1-800-555-1212 に電話してください", $phones);<br />?> <br><br><br>例 2 一致する HTML タグの検索 (貪欲) <br><br><?php<br>// \2 は逆参照の例で、PCRE での意味は <br>// は、正規表現自体の 2 番目の括弧セット内の内容と一致する必要があります。この例では、<br>// は ([w]+) です。文字列は二重引用符で囲まれているため、<br>// を追加してバックスラッシュを追加する必要があります。 <br>$html = "<b>太字</b><a href=howdy.html>クリックしてください</a>";