为了开发Web应用程序的路由模块,我必须大量使用正则表达式。 我必须测试表单的URI:
/Services/service_name/List/of/Parameters/or/nothing
服务名称是必需的,但不是行参数的结尾。
该行可以以斜杠结尾。
除字母数字字符外,参数只能包含特殊字符-
和_
。
这里有问题的表达方式:
(?:\/Services\/(?'var'[[:alnum:]_-]+)|\G(?!\A))(?:\/(?'params'[[:alnum:]_-]+))?
您会看到,如果我们在链的末尾添加+
,它仍然有效,而不应该是。
答案 0 :(得分:0)
如果字符串仅以斜杠或字母数字结尾,并且在开头使用正面预测(?=.*(?:\/|[[:alnum:]_-])$)
,则可以强制匹配字符串:
(?=.*(?:\/|[[:alnum:]_-])$)(?:\/Services\/(?'var'[[:alnum:]_-]+)|(?<!^)\G)\/(?:(?'params'[[:alnum:]_-]+))?
注意我正在使用多线模式,假设您将这些字符串作为单独的实体。
请参阅demo