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 に答える