在php中将大字符串拆分为单词

时间:2012-01-31 23:05:38

标签: php regex preg-split

我在php中有一个长字符串,由不同的段落组成,每个段落都有不同的句子(它几乎是一个小文档)。我想通过删除任何不相关的符号/字符将整个事物分成单词。例如,删除逗号,空格,换行符,句号,感叹号以及任何可能无关的内容,以便只得到单词。

是否有一种简单的方法可以一次性完成此操作,例如使用正则表达式和preg_split函数,或者我必须多次使用explode函数:例如,首先得到所有的句子(通过删除'。','!'等)。然后通过删除','和空格等来获取单词。

我不想在所有可能不相关的字符上使用explode函数,因为它很耗时,我可能会意外地忽略所有可能的字符。

我想找到一种更自动的方式。我认为正确定义正则表达式可能会起作用,但我需要再次指定所有可能的字符,而且我也不知道如何在php中编写正则表达式。

那你能告诉我什么?

4 个答案:

答案 0 :(得分:3)

是否要删除标点字符等,然后将单词拆分为数组?或者只是剥离它,所以只有字母和空格?不完全确定你想要实现的目标,但以下内容可能有所帮助:

<?php

$string = "This is a sentence! It has *lots* of #$@king random non-word characters. Wouldn't you like to strip them?";

$words = preg_replace("/[^\w\ _]+/", '', $string); // strip all punctuation characters, news lines, etc.
$words = preg_split("/\s+/", $words); // split by left over spaces

var_dump($words);

无论哪种方式,它都为您提供了使用正则表达式根据需要处理文本的一般概念。我的例子有两个部分,就像&#34;不会&#34;#34;并没有像其他答案所建议的那样分成两个单词。

答案 1 :(得分:1)

要兼容unicode,你应该使用这个:

preg_split('/\PL+/u', $string, -1, PREG_SPLIT_NO_EMPTY);

分裂不是字母的字符。

查看here以查看 unicode字符属性。

答案 2 :(得分:0)

只需使用preg_replace()并定义一个正则表达式以匹配您要替换的不同字符,并提供替换字符以替换它们。

http://php.net/manual/en/function.preg-replace.php

对于您要搜索的字符,您可以在PHP数组中定义这些字符,如PHP手册中所示。

答案 3 :(得分:0)

您的答案属于正则表达式的范畴,可能很难做到正确。在几乎所有情况下,你都可以获得一些效果很好的东西,但会有例外。

这可能会有所帮助:

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