验证超出我想要的PCRE模式

时间:2015-05-19 10:15:55

标签: regex expression pcre

为了开发Web应用程序的路由模块,我必须大量使用正则表达式。 我必须测试表单的URI:

/Services/service_name/List/of/Parameters/or/nothing

服务名称是必需的,但不是行参数的结尾。 该行可以以斜杠结尾。 除字母数字字符外,参数只能包含特殊字符-_

这里有问题的表达方式:

(?:\/Services\/(?'var'[[:alnum:]_-]+)|\G(?!\A))(?:\/(?'params'[[:alnum:]_-]+))?

Demo on regex101

您会看到,如果我们在链的末尾添加+,它仍然有效,而不应该是。

1 个答案:

答案 0 :(得分:0)

如果字符串仅以斜杠或字母数字结尾,并且在开头使用正面预测(?=.*(?:\/|[[:alnum:]_-])$),则可以强制匹配字符串:

(?=.*(?:\/|[[:alnum:]_-])$)(?:\/Services\/(?'var'[[:alnum:]_-]+)|(?<!^)\G)\/(?:(?'params'[[:alnum:]_-]+))?

注意我正在使用多线模式,假设您将这些字符串作为单独的实体。

请参阅demo