喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: [问题] 高手请进,正则问题  
 
hhxx
新手上路
Rank: 1



UID 75394
精华 0
积分 4
帖子 2
金钱 4 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-6-23
状态 离线
[广告]: q m
高手请进,正则问题

我最近在研究alexa,现在碰到了一个难题,我想把一些数值提取出来
如下面

<?php
<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=VE&ts_mode=country&lang=none">Venezuela</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span></div>

<
div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=BR&ts_mode=country&lang=none">Brazil</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span></div>

<
div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=ES&ts_mode=country&lang=none">Spain</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span></div>

<
div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=RU&ts_mode=country&lang=none">Russia</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span></div>

<
div class="geo_percentages"><span class="geo_country">Other countries</span><span class="geo_number descbold">3.8%</span><span class="geo_bar"><span style="width: 3.8px" class="geo_stat"></span></span></div>
?>
我想最终得到这样的数组:

<?php
Array
(
    [
Venezuela] => 0.2%
    [
Brazil] => 0.2%
    [
Spain] => 0.2%
    [
Russia] => 0.1%
    [
Other countries ] => 3.8%
)
?>
可我正则怎么都写不好,求高人出手!
2008-3-13 05:13 PM#1
查看资料  发短消息  顶部
 
hhxx
新手上路
Rank: 1



UID 75394
精华 0
积分 4
帖子 2
金钱 4 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-6-23
状态 离线
[推荐阅读] mysql 存储路径 知道的请进
上面的五组字符串是$c的五个元素,

  for($i=0;$i<count($c);$i++)
  {
   preg_match("/\">([A-Z].*)<\//", $c[$i], $matchesa);
   preg_match("/descbold\">(.*[\%])<\/span>/", $c[$i], $matchesb);
   //echo $matchesa[1].$matchesb[1]."<br>";
   $nums2_info[$matchesa[1]]=$matchesb[1];
  }

  print_r($nums2_info);
得到的是,

<?php
Array
(
    [] =>     [
Nigeria</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span>] => 0.2%
    [
Venezuela</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span>] => 0.2%
    [
Brazil</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span>] => 0.2%
    [
Spain</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span>] => 0.1%
    [
Russia</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span>] => 0.1%
    [
Other countries</span><span class="geo_number descbold">3.8%</span><span class="geo_bar"><span style="width: 3.8px" class="geo_stat"></span></span></div>] => 3.8%
)
?>
不是我想要得到的,怎么做?
2008-3-13 05:14 PM#2
查看资料  发短消息  顶部
 
songlv (超级版主)
论坛元老
Rank: 8Rank: 8


UID 73828
精华 0
积分 3021
帖子 693
金钱 3017 喜悦币
威望 0
人脉 4
阅读权限 90
注册 2006-5-22
状态 离线
[推荐阅读] mysql 存储路径的问题 知道的请进


<?php
$str
=<<<EOT

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=VE&ts_mode=country&lang=none">Venezuela</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=BR&ts_mode=country&lang=none">Brazil</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=ES&ts_mode=country&lang=none">Spain</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=RU&ts_mode=country&lang=none">Russia</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country">Other countries</span><span class="geo_number descbold">3.8%</span><span class="geo_bar"><span style="width: 3.8px" class="geo_stat"></span></span></div>
EOT;
preg_match_all('|lang=none">(.*)</a>(.*)geo_number descbold">(.*)</span>|isU',$str,$c);

//合并成数组
$r=array_combine($c[1],$c[3]);
print_r($r);
?>
输出结果:

<?php
Array
(
    [
Venezuela] => 0.2%
    [
Brazil] => 0.2%
    [
Spain] => 0.1%
    [
Russia] => 0.1%
)
?>
[ 本帖最后由 songlv 于 2008-3-13 05:28 PM 编辑 ]




不要跑  不要玩   不要看  不要  
2008-3-13 05:23 PM#3
查看资料  访问主页  Blog  发短消息  顶部
 
songlv (超级版主)
论坛元老
Rank: 8Rank: 8


UID 73828
精华 0
积分 3021
帖子 693
金钱 3017 喜悦币
威望 0
人脉 4
阅读权限 90
注册 2006-5-22
状态 离线
[推荐阅读] 如何在固定日期自动执行一个脚本
不好意思,没注意最后还有个特例

<?php
$str
=<<<EOT

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=VE&ts_mode=country&lang=none">Venezuela</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=BR&ts_mode=country&lang=none">Brazil</a></span><span class="geo_number descbold">0.2%</span><span class="geo_bar"><span style="width: 0.2px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=ES&ts_mode=country&lang=none">Spain</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country"><a href="/site/ds/top_sites?cc=RU&ts_mode=country&lang=none">Russia</a></span><span class="geo_number descbold">0.1%</span><span class="geo_bar"><span style="width: 0.1px" class="geo_stat"></span></span></div>

<div class="geo_percentages"><span class="geo_country">Other countries</span><span class="geo_number descbold">3.8%</span><span class="geo_bar"><span style="width: 3.8px" class="geo_stat"></span></span></div>
EOT;
preg_match_all('|<span class="geo_country">(.*)</span>(.*)<span class="geo_number descbold">(.*)</span>|isU',$str,$c);

//合并成数组
foreach($c[1] as $k=>$v){
        
$r[strip_tags($v)]=$c[3][$k];
    
}
print_r($r);
?>
输出结果:

<?php
Array
(
    [
Venezuela] => 0.2%
    [
Brazil] => 0.2%
    [
Spain] => 0.1%
    [
Russia] => 0.1%
    [
Other countries] => 3.8%
)
?>




不要跑  不要玩   不要看  不要  
2008-3-13 05:34 PM#4
查看资料  访问主页  Blog  发短消息  顶部
 
weiqk
新手上路
Rank: 1



UID 93692
精华 0
积分 28
帖子 29
金钱 28 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-5-27
状态 离线
[推荐阅读] 如何在站点之外建立文件夹???
找个正则测试工具,先测试一下,鄙人不建议把问题直接贴出来
村里的大哥会给你指明方向,但是,可能,也许没有义务帮您解决问题
2008-3-14 05:38 PM#5
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.032441 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP