验证比我想要的更多的 PCRE 模式
PCRE pattern that validates more than I wants
为了开发一个网络应用程序的路由模块,我不得不大量使用正则表达式。
我必须测试以下形式的 URI:
/Services/service_name/List/of/Parameters/or/nothing
服务名称是必填项,但不是行尾参数。
该行可以以斜杠结尾,也可以不以斜杠结尾。
除字母数字字符外,参数只能包含特殊字符 -
和 _
.
这里是有问题的表达式:
(?:\/Services\/(?'var'[[:alnum:]_-]+)|\G(?!\A))(?:\/(?'params'[[:alnum:]_-]+))?
你看,如果我们在链的末尾添加 +
它仍然有效,但它不应该有效。
如果字符串以斜线或字母数字结尾,您可以在开头使用正向预测 (?=.*(?:\/|[[:alnum:]_-])$)
强制匹配字符串:
(?=.*(?:\/|[[:alnum:]_-])$)(?:\/Services\/(?'var'[[:alnum:]_-]+)|(?<!^)\G)\/(?:(?'params'[[:alnum:]_-]+))?
请注意,我使用的是多行模式,假设您将这些字符串作为单独的实体。
见demo
为了开发一个网络应用程序的路由模块,我不得不大量使用正则表达式。 我必须测试以下形式的 URI:
/Services/service_name/List/of/Parameters/or/nothing
服务名称是必填项,但不是行尾参数。
该行可以以斜杠结尾,也可以不以斜杠结尾。
除字母数字字符外,参数只能包含特殊字符 -
和 _
.
这里是有问题的表达式:
(?:\/Services\/(?'var'[[:alnum:]_-]+)|\G(?!\A))(?:\/(?'params'[[:alnum:]_-]+))?
你看,如果我们在链的末尾添加 +
它仍然有效,但它不应该有效。
如果字符串以斜线或字母数字结尾,您可以在开头使用正向预测 (?=.*(?:\/|[[:alnum:]_-])$)
强制匹配字符串:
(?=.*(?:\/|[[:alnum:]_-])$)(?:\/Services\/(?'var'[[:alnum:]_-]+)|(?<!^)\G)\/(?:(?'params'[[:alnum:]_-]+))?
请注意,我使用的是多行模式,假设您将这些字符串作为单独的实体。
见demo