3

特定の基準に一致する正規表現を作成しようとしていますが、希望どおりに機能させることができません。

私の現在の正規表現は

'/S(?:[0-9]){2}E(?:[0-9]){2}/i'

私がやりたいのは、次の基準に一致することです

アンS

少なくとも1桁0-9

オプションの数字は0-9

アンE

少なくとも1桁0-9

オプションの数字は0-9

また、可能であれば、単一の数字よりも二重の数字を一致させたいと思います。インターネット上のチュートリアルに従って正規表現を作成しましたが、何かが足りないと思います。

ありがとう...

4

1 に答える 1

7

これを試して:

<?php

$reg = "#S\d{1,2}E\d{1,2}#";

$tests = array('S11E22', 'S1E2', 'S11E2', 'S1E22', 'S111E222', 'S111E', 'SE', 'S0E0');

foreach ($tests as $test) {
    echo "Testing $test... ";
    if (preg_match($reg, $test)) {
        echo "Match!";
    } else {
        echo "No Match";
    } 
    echo "\n";
}

出力:

Testing S11E22... Match!
Testing S1E2... Match!
Testing S11E2... Match!
Testing S1E22... Match!
Testing S111E222... No Match
Testing S111E... No Match
Testing SE... No Match
Testing S0E0... Match!

説明:

 $reg = "#S\d{1,2}E\d{1,2}#";
          ^ ^  ^  ^ ^  ^
          | |  |  | |  |
    Match S |  |  | |  One or two times
  Match digit  |  | Match a digit
One or two times  Match the letter E

編集

オプションで、次のようなものでこれを行うことができます

$reg = '#S\d\d?E\d\d?#';

つまり、Sの後に数字が続き、場合によっては別の数字が続く?...などです。

于 2012-05-30T10:09:32.040 に答える