代码之家  ›  专栏  ›  技术社区  ›  Ali

从句子中解析单词的Regexp

  •  2
  • Ali  · 技术社区  · 14 年前

    我需要一个正则表达式来解析句子或段落中的单词。应该使用的分隔符有:空格和点。所以在:

    My name is Bob.I'm 104 yrs old.
    

    Bob I'm 是分开的,即使他们之间没有任何空间,但一个点。

    任何其他固定的单词分隔符也应包括在内。

    5 回复  |  直到 14 年前
        1
  •  6
  •   ircmaxell    14 年前
    $words = preg_split('#[\\s.]#', $string, -1, PREG_SPLIT_NO_EMPTY);
    

    这个 \\s 将匹配所有空格字符(如空格、制表符、换行符等)。这个 . 会匹配的,好吧 ... 如果您想添加更多字符,只需在 . [ ,一个 ] 和一个 # 必须带着 \\ - 必须是列表中的最后一个字符)。。。

    它将返回您的上述句子:

    array(9) {
      [0]=>
      string(2) "My"
      [1]=>
      string(4) "name"
      [2]=>
      string(2) "is"
      [3]=>
      string(3) "Bob"
      [4]=>
      string(3) "I'm"
      [5]=>
      string(3) "104"
      [6]=>
      string(3) "yrs"
      [7]=>
      string(3) "old"
    }
    
        2
  •  9
  •   Felix Kling    14 年前

    str_word_count() ?:

    在这个函数中,“word”被定义为一个包含字母字符的区域设置相关字符串,字母字符也可以包含但不能以“'”和“-”字符开头。

    例子:

    $str = "My name is Bob.I'm 104 yrs old."; 
    print_r(str_word_count($str, 1, '0123456789'));
    

    给予:

    Array
    (
        [0] => My
        [1] => name
        [2] => is
        [3] => Bob
        [4] => I'm
        [5] => 104
        [6] => yrs
        [7] => old
    )
    

        3
  •  2
  •   Peter Boughton    14 年前

    有两种方法可以做到这一点,包括独占或独占,方法是按以下任意一种进行拆分:

    使用“单词字符”,加上常用的“连接符”(撇号、连字符等),并否定整个组:

    [^\w'-]+
    

    [\s.;:()]+
    

    (在这两种情况下 + 避免创建空组。)

    http://www.regular-expressions.info/charclass.html

        4
  •  0
  •   Paul Sasik    14 年前

    查看 word boundary anchor (\b或\w)从空格和标点符号中分离单个单词。

        5
  •  -1
  •   knittl    14 年前

    preg_split

    $words = preg_split('/\W+/', $sentence); // split on non-word-characters
    

    这显然会把我分成我和我