我需要从文章中提取出作者提到的城市和区名。
例如 
hi,every one. I'm at chaoyang
有一个数组提供了这样的数据:
array(
'beijing' => array('chaoyang'),
'shanghai' => array('xuhui', 'jingan')
);
现在的能生成的正则匹配规则是
((chaoyang)|(xuhui|jingan))试问我能不能知道它匹配到了那个组里的集合? 是(chaoyang) 还是 (xuhui|jingan) ?
如果不能 各位有什么好算法吗?我不想我即使获取到了区,还要再去遍历一次数组找到所属城市,因为这个数组会非常庞大

解决方案 »

  1.   

    在php 4.3.3中, 可以对子组使用(?P<name>pattern)的语法进行命名. 这个子模式将会在匹配结果中同时以其名称和顺序(数字下标)出现. php 5.2.2中又增加了两种味子组命名的语法: (?<name>pattern)和(?’name’pattern)
      

  2.   

    有点意思$s = "hi,every one. I'm at chaoyang. xuhui";
    $a = array(
      'beijing' => array('chaoyang'),
      'shanghai' => array('xuhui', 'jingan')
    );
    $t = array();
    foreach($a as $key=>$item) {
      $t[] = "(?<$key>" . join('|', $item) . ')';
    }
    $p = join('|', $t);
    preg_match_all("/$p/", $s, $r);print_r($r);Array
    (
        [0] => Array
            (
                [0] => chaoyang
                [1] => xuhui
            )    [beijing] => Array
            (
                [0] => chaoyang
                [1] => 
            )
        [1] => Array
            (
                [0] => chaoyang
                [1] => 
            )    [shanghai] => Array
            (
                [0] => 
                [1] => xuhui
            )
        [2] => Array
            (
                [0] => 
                [1] => xuhui
            ))