如果字符串在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
将要求字符串只有单词字符和空格。