答案 0 :(得分:0)
你需要一个HTML parser。 HTML是不规则的,因此正则表达式效果不佳。
答案 1 :(得分:0)
我有一个漂亮的小工具,你可以使用。
制作正则表达式键在gskinner.com上查看RegExr。
此外,我相信这是您寻找的模式。对于要匹配的锚,它必须具有包含域的完整URL。我将在数组中输出URL,域和路径。见下文。
的preg_match('/ HTTP:??\ / \ /(P [A-Z0-9 /] + \ [\ W] +)(P [?\ / \ \ W \ = \&安培;] +)?)[\ s \ w =“] +> /',$ site,$ anchors);
$ url = $ anchors ['url'];
$ domain = $ anchors ['domain'];
$ path = $ anchors ['path'];
让我知道它是怎么回事。我没有对此进行测试,所以如果出现错误我会道歉。
答案 2 :(得分:0)
要为此使用正则表达式,您需要一些一致的分隔符。值得庆幸的是,您想要的网址 - 以及您想要的网址 - 在源代码中看起来像这样:
target="_blank">-->the url is here<!--</a>-->
意味着你想要的正则表达式是:
@target="_blank">-->(?P<url>.+?)<!--</a>-->@
来自第一个捕获组的匹配项(在“url”下编入索引)将包含 - surprise - URLs。为什么命名捕获组?当你回顾你的代码时,似乎更容易弄清楚你在做什么。
答案 3 :(得分:0)
我试过运行它,它似乎工作,只改变了正则表达式
<?php
for($i=0;$i<=25;$i++){
$site_url = "http://www.directorymaximizer.com/index.php?pageNum_directory_list=$i";
$preg_math = file_get_contents($site_url);
$regex = '@-->(https?://[^<]*)<\!--@';
preg_match_all($regex, $preg_math, $matches, PREG_PATTERN_ORDER);
foreach($matches as $key=>$val){
if($val!="" && !is_numeric($val)){
foreach(array_unique($val) as $key1=>$val1){
if( $val1!="" && !is_numeric($val1)){
echo $val1;
echo "<br />\n";
}
}
}
}
}