3

我正在尝试制作一个正则表达式来匹配某个标准,但我无法让它按照我想要的方式工作。

我目前的正则表达式是

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

我想做的是符合以下条件

一个S

至少一位数0-9

一个可选的数字,可以是0-9

一个E

至少一位数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 回答