用于解析句子中单词的正则表达式

时间:2010-08-05 17:14:01

标签: php regex string

我需要一个正则表达式来解析句子或段落中的单词。应该使用的一些独立者是:空格和点。所以在:

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

BobI'm是分开的,即使它们之间没有任何空格,也只是一个点。

还应包括任何其他常规单词。

5 个答案:

答案 0 :(得分:9)

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
)

第三个参数采用一个字符串,该字符串定义哪些附加字符应被视为“单词字符”。

答案 1 :(得分:6)

$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 :(得分:2)

通过拆分以下任一方式,可以采用包容性或排他性两种方式:

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

[^\w'-]+

或指定您认为的非单词字符(空格,点,冒号,parens等):

[\s.;:()]+

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

某些字符需要在字符类中进行转义 - 有关详细信息,请参阅http://www.regular-expressions.info/charclass.html

答案 3 :(得分:0)

查看word boundary anchor(\ b或\ w),将单个字与空格和标点符号隔离开来。

答案 4 :(得分:-1)

查看preg_split

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

这显然会分裂»我是«进入> I <和> m << / p>