我正在尝试使用 PHP 中的正则表达式验证以下类型的字符串。使用 PHP 5.5.9。
字符串采用以下格式:
/[sometext]/course/[sometext1]/[sometext2]
我需要的是一个正则表达式,它只接受该格式的字符串,而不接受其他格式的字符串。这意味着这些将是无效的:
/aaa/course/bbb/ccc/
/aaa/course/bbb/ccc/ddd
到目前为止我所拥有的是:
/\/(?P<domain>.+?)\/course\/(?P<courseid>.+?)\/(?P<reportname>.+?)/
有什么想法吗?
更新:
在所有海报,尤其是 wiktor-stribi%c5%bcew 的帮助下,我得到了这个有效的:
$regex = '#^/(?P<domain>[^/]+)/course/(?P<courseid>[^/]+)/(?P<reportname>[^/]+)$#';
最佳答案
您可以使用以下正则表达式:
^\/(?P<domain>[^\/]+)\/course\/(?P<courseid>[^\/]+)\/(?P<reportname>[^\/]+)$
PHP:
$re = '~^/(?P<domain>[^/]+)/course/(?P<courseid>[^/]+)/(?P<reportname>[^/]+)$~';
请参阅regex demo
[^\/]
是一个否定字符类,可匹配除 /
之外的任何字符。
^
和 $
通常足以确保您的输入以当前模式开始和结束(您可以将它们替换为 \A
和 \z
分别确保 \z
在字符串的最末尾匹配,或使用 ^
/$
与 /D
修饰符)。
即使您使用惰性 .+?
点匹配,如果需要返回有效的 .
分隔符,.
也可能会溢出多个 /
分隔符。匹配。
关于php - 字符串验证的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35605507/