0

如果字符串介于 1-6 个单词之间,则尝试匹配。即使超过 6 个单词,这也匹配字符串:

foreach ($this->desc1 as $string) {
    if (preg_match("/^([\w]+[\s]*){1,6}?/", $string)){
        echo '<h2 class="first">' . $string . '</h2>' . "\n";
    }
    else{
        echo '<p>' . $string . '</p>' . "\n";
    }
}

问题是匹配任何仅包含 1-6 个单词的字符串的正确语法是什么?

4

3 回答 3

3

我相信你需要用 $ 来终止它。

例子:

if (preg_match("/^([\w]+[\s]*){1,6}$/", $string)){
于 2013-08-30T22:57:19.330 回答
1

您必须添加(如 Matthew Daly 所说)字符串锚 ( $) 的末尾。您不需要在方括号内加上\s\w,因为它们已经是字符类。您不需要太捕获括号,因为您只执行检查,我将其替换为原子组(但您也可以使用非捕获组(?:...)

 if (preg_match('/^\s*(?>\w+\s*){1,6}$/', $string)) {

注意:我\s*在字符串的开头添加了可选空格 ( ),但如果不需要,可以将其删除。

于 2013-08-30T23:17:16.500 回答
0

那应该是:

/^\W*(\w+\W*){1,6}$/

\W代替的原因\s是这\s将要求字符串只有单词字符和空格。

于 2013-08-31T03:19:48.487 回答