我的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
我的代码出了什么问题?
答案 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());
(?1)
递归第一个子模式。
[0-9]
匹配0到9之间的所有数字。
或强>
SS00 - SS99
,我认为您的意思是从SS00
到SS99
。在这种情况下,您可以使用\d
(匹配范围从0到9的数字)。
$pregResult = preg_match('~^(?:SS\d{2}|WS\d{2}\/\d{2})$~m', $newModul->getGueltigkeitszeitraum());
答案 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