2016-07-11 5 views
1

文字列に特定の構造がある場合は、preg_match()でphpでどのように確認できますか?たとえば、文字列は次のとおりです。私は、文字列が重要です;文字列に特定の構造があるかどうかを調べるpreg_match

で区切られた文字列のnの数字が続く:が続く文字列と何かで始まるかどうかを確認したい

options:blue;white;yellow; 

- 文字列はキリル文字であってもよく、ラテン文字だけではない

+0

文字列を ';'で区切って指定しますか?エンコーディングUTF-8ですか? – Will

+0

はい、utf-8はエンコーディングです – Europeuser

+0

文字列に数字や記号を含めることはできますか? – Will

答えて

1

これは、文字列を検証します、あなたの質問に記載されている唯一の制限が必要とされていると仮定:

$number = 3; 
$regex = sprintf('/^[^:]+:(?:[^;]+;){%d}$/', $number); 

if (preg_match($regex, $string)) { 
    echo "It matches!"; 
} else { 
    echo "It doesn't match!"; 
} 
ここ

php -aを使用して、アクションでの例です:

php > $number = 3; 
php > $regex = sprintf('/^[^:]+:(?:[^;]+;){%d}$/', $number); 

php > if (preg_match($regex, 'options:blue;white;yellow;')) { 
php {  echo "It matches!"; 
php { } else { 
php {  echo "It doesn't match!"; 
php { } 
It matches! 

php > if (preg_match($regex, 'options:blue;white;yellow;green;')) { 
php {  echo "It matches!"; 
php { } else { 
php {  echo "It doesn't match!"; 
php { } 
It doesn't match! 

あなたはこの正規表現hereを視覚化することができます。

/.../   Start and end of the pattern. 
^    Start of the string. 
[^:]+   At least one character that is not a ':'. 
:    A literal ':'. 
(?:[^;]+;){N} Exactly N occurrences of: 
        [^;]+ At least one character that is not a ';'. 
        ;  A literal ';'. 
$    End of the string. 
+0

#私はそれをテストした後、私はそれが部分的に動作することを確認することができます。 $ number = 3はオプションの数を定義していると思いますが、n個のオプションがあり、タスクが複雑になります。 – Europeuser

+0

分かりません... '$ number'はあなたの' n'です。あらかじめ何を知っているか分かっているなら、その数に '$ number'を設定してください。それとも、あなたが何をするのか分からないのですか? – Will

+0

yesそうですが、これを次のように変更して整理しました:$ number = count(explode( ';'、rtrim($ _ POST ['addoptions']、 ";")));それは期待どおりに働いています、ありがとう! – Europeuser

関連する問題