preg_replace(#s+#)的简单模式的含义


Meaning of a simple pattern of preg_replace (#s+#)?

很抱歉有一个非常基本的问题,但无论是在谷歌还是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 )