PHP预匹配,如果仅在1-6个单词之间


PHP pregmatch if between 1-6 words only

如果字符串在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个单词的字符串的正确语法是什么?

我认为您需要用$来终止它。

示例:

if (preg_match("/^(['w]+['s]*){1,6}$/", $string)){

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

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

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

应该是:

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

'W而不是's的原因是's将要求字符串只有单词字符和空格。