很抱歉有一个非常基本的问题,但无论是在谷歌还是SymbolHound中,都没有简单的方法来搜索这样的字符串。在PHP手册中也没有找到答案(模式语法&preg_replace)。
此代码位于接收$content
和$length
参数的函数内部preg_replace
的作用是什么?
$the_string = preg_replace('#'s+#', ' ', $content);
$words = explode(' ', $the_string);
if( count($words) <= $length )
另外,使用str_word_count
会更好吗?
此模式用单个常规空格('')替换连续的空格字符(注意,不仅是空格,还有换行符或制表符)。's+
表示"匹配由一个或多个空格字符组成的序列"。
#
符号是模式的分隔符。可能更常见的是看到由正斜杠分隔的模式。(实际上,您可以在不使用分隔符的情况下在PHP中执行REGEX,但这样做会影响模式的处理方式,这超出了本问答的范围)。
http://php.net/manual/en/regexp.reference.delimiters.php
依靠空格在字符串中查找单词通常不是最好的方法——我们可以使用'b
单词边界标记。
$sentence = "Hello, there. How are you today? Hope you're OK!";
preg_match_all('/'b['w-]+'b/', $sentence, $words);
也就是说:获取大字符串中的所有子字符串,这些子字符串仅由字母数字字符或连字符组成,并且由单词边界包围。
$words
现在是句子中使用的一组单词。
#
是分隔符
常用的分隔符是正斜杠(/)、哈希符号(#)和波浪号(~)。以下是有效分隔的所有示例图案。
$the_string = preg_replace('#'s+#', ' ', $content);
它将用单空间取代多空间('s
)
's+
用于匹配多个空间。您正在使用preg_replace('#'s+#', ' ', $content);
将它们替换为单个空间
str_word_count
可能是合适的,但您可能需要指定其他算作单词的字符,或者函数在使用UTF-8字符时报告错误的值。
str_word_count($str, 1, characters_that_are_not_considered_word_boundaries);
示例:
print_r(str_word_count('holóeóó what',1));
返回
Array ( [0] => hol [1] => e [2] => what )