大概需求:从一段文字把英文的姓名提取出来
分析:1.根据首字母大写来提取,如果大于1个的连续的首字母大写的单词,可认为是姓名
      2.姓和名之间可以多个空格,比如:Abc   Defg
      3.可匹配 Simon C Whitehead 这样的名字
      4.姓名的单词只匹配2或3个(如果连续这样的单词多于3个的话,认为不是姓名了)
      5.姓名中不包含任何符号(如果有其他符号的,可认为不是姓名)
      6.只匹配第一个符合的。
因为工作的关系,需要进行模糊数据分析,故有以上的需求,求高手帮忙

解决方案 »

  1.   

    <script>
    var reg = /(([A-Z][A-Z|a-z]+)\s+){2,3}/g;
    var str="fuck you DAM Mike   Gohn Fuck as a";
    var ss = str.match(reg);
    alert(ss);
    </script>
      

  2.   

    我要在PHP里面用的,我修改了一下,
    /(([A-Z][a-z]+)\s+){2,3}/
    还是不成,一个都没出来
      

  3.   


    $str = "fuck you Dam Mike s Gohn Fuck ss a";
    preg_match('/(([A-Z][a-z]+)( ?)){2,3}/', $str, $names);
    echo $names[0];
      

  4.   

    $p = "/(?:(?:\b[A-Z][A-Za-z]*) +){2,3}/";$s = "fuck yOu C DAM Mike Gohn Fuck as a";preg_match_all($p, $s, $r);
    print_r($r);如果只要匹配一个,则 preg_match($p, $s, $r);
      

  5.   

    我最后采用的是:
    $str    = "fuck you Dam Mike s Gohn Fuck ss a";
    preg_match('/(([A-Z][a-z]+)( ?)){2,3}/', $str, $names);
    echo $names[0];
    $p = "/(?:(?:\b[A-Z][A-Za-z]*) +){2,3}/";
    这个也没问题,不过发的晚了