php - 字符串验证的正则表达式问题

标签 php regex

我正在尝试使用 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/

相关文章:

regex - 正则表达式 - 解析域问题

Javascript 拆分并加入 PHP

python - 处理正则表达式中的空格

php - Javascript 和 PHP 中的正则表达式匹配问题

php - SIP2 不支持 php 中的 TLS1.2 协议(protocol)

php - Yii2使用hasMany关系获取数据

ruby - 如何使用正则表达式用逗号分隔字符串(括号内除外)?

php - .htaccess重写规则异常

javascript - $.get 将数字转换为字符串

regex - s/\G/0/g 是什么意思?