7

很抱歉这个非常基本的问题,但是在 Google 或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吗?

4

3 回答 3

6

此模式用单个常规空格 (' ') 替换连续的空格字符(注意,不仅是空格,还包括换行符或制表符)。\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现在是句子中使用的单词数组。

于 2012-07-17T11:29:01.753 回答
1

#分隔符

常用的分隔符是正斜杠 (/)、井号 (#) 和波浪号 (~)。以下是有效分隔模式的所有示例。

$the_string = preg_replace('#\s+#', ' ', $content);

它将\s用单个空格替换多个空格()

于 2012-07-17T11:27:40.787 回答
1

\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 )
于 2012-07-17T11:26:41.623 回答