ホームページ > バックエンド開発 > PHPチュートリアル > 通常の URL が Web ページのコンテンツと一致する問題を解決する方法

通常の URL が Web ページのコンテンツと一致する問題を解決する方法

WBOY
リリース: 2016-06-13 13:39:41
オリジナル
1010 人が閲覧しました

匹配网页内容的网址的正则
我希望把这个网址http://www.425sf.com/的网址都匹配出来

PHP code
<!--

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);

ログイン後にコピー

上面的匹配正则我是参考这里的
http://topic.csdn.net/u/20070307/14/87e6b878-800e-4a88-830e-7d0eeeaba891.html
我用正则测试工具试过比较准确
但是这里php运行好像取不出来

------解决方案--------------------
PHP code
$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>";
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート