我需要一个正则表达式来解析句子或段落中的单词。应该使用的一些独立者是:空格和点。所以在:
My name is Bob.I'm 104 yrs old.
Bob
和I'm
是分开的,即使它们之间没有任何空格,也只是一个点。
还应包括任何其他常规单词。
答案 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)
$words = preg_split('/\W+/', $sentence); // split on non-word-characters
这显然会分裂»我是«进入> I <和> m << / p>