PHP正则表达式,每一个Check都是真的

时间:2015-01-15 23:18:52

标签: php regex

我的PHP中的Regex出现了一些问题

代码:

$pregResult = preg_match('/(([S][S])[1-9]{2})|(([W][S])[1-9]{2}\/[1-9]{2})/', $newModul->getGueltigkeitszeitraum());

我每次都有1次结果......(真)

我想要做的只是允许以下组合

SS00 - SS99
WS00/00 - WS99/99

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:3)

我想你想要这样的东西,

$pregResult = preg_match('~^(?:(SS[0-9]{2})(?:\h+-\h+(?1))|(WS[0-9]{2}\/[0-9]{2})(?:\h+-\h+(?2)))$~m', $newModul->getGueltigkeitszeitraum());

DEMO

(?1)递归第一个子模式。

[0-9]匹配0到9之间的所有数字。

SS00 - SS99,我认为您的意思是从SS00SS99。在这种情况下,您可以使用\d(匹配范围从0到9的数字)。

$pregResult = preg_match('~^(?:SS\d{2}|WS\d{2}\/\d{2})$~m', $newModul->getGueltigkeitszeitraum());

DEMO

答案 1 :(得分:1)

请改为尝试:

$pregResult = preg_match('/^([S][S][0-9]{2}|[W][S][0-9]{2}\/[0-9]{2}|Schuljahr[0-9]{2}\/[0-9]{2})$/',
     $newModul->getGueltigkeitszeitraum());

^:模式应位于字符串的开头

$:字符串

中的模式之后应该没有任何内容

[S]:角色S

[0-9]:一个数字(与\d相同)

[0-9]{2}:确切的2位

点击此处了解更多信息PHP Regular Expression