PCRE 使参数可选
PCRE make parameters optional
我要配:
- /城市和国家/地区/
- /city-and-country-to-state/nederland
- /city-and-country-to-state/nederland/阿姆斯特丹
- /city-and-country-to-state/Germany/übercity
我有这个正则表达式:/city-and-country-to-state/(?<country>[\p{L}\s]+)/(?<city>[\p{L}\s]+)$)u
preg_match(正则表达式,/city-and-country-to-state/nederland/amsterdam)的输出:
Array
(
[0] => /city-and-country-to-state/nederland/amsterdam
[country] => nederland
[1] => nederland
[city] => amsterdam
[2] => amsterdam
)
如何将 /country 和 /city 设为可选?
我想稍后检查一下,并在缺少其中一个参数时向客户显示一个很好的错误。
感谢您的帮助!
您可以将此正则表达式与可选组件一起使用:
^/city-and-country-to-state(?:/(?<country>[^/\n]+)(?:/(?<city>[^/\n]+))?)?/?$
RegEx Demo
代码:
preg_match_all(
'~^/city-and-country-to-state(?:/(?<country>[^/]+)(?:/(?<city>[^/]+))?)?/?$~um',
$input, $matches
);
我可能会使用更通用的东西,比如
/city-and-country-to-state(/[\p{L}\s]+)*
然后解析生成的组。如果有,那就把它当作一个国家。如果有两个,则将第二个视为城市。如果有 none,则显示错误信息。
这也更具可扩展性,因为您可以降低到更精细的特异性,而无需重新发明您的正则表达式。例如,如果你要为美国做这样的事情,那么你可以使用
/city-and-country-to-state/US/Atlanta
或者,要指定较小的城市,
/city-and-country-to-state/US/California/Atlanta
/city-and-country-to-state/US/Idaho/Atlanta
/city-and-country-to-state/US/Texas/Atlanta
我猜这对于您的特定用例可能没有意义(假设您似乎正在根据 country/city 解析状态)但我通常是不把自己画到角落里。
我要配:
- /城市和国家/地区/
- /city-and-country-to-state/nederland
- /city-and-country-to-state/nederland/阿姆斯特丹
- /city-and-country-to-state/Germany/übercity
我有这个正则表达式:/city-and-country-to-state/(?<country>[\p{L}\s]+)/(?<city>[\p{L}\s]+)$)u
preg_match(正则表达式,/city-and-country-to-state/nederland/amsterdam)的输出:
Array
(
[0] => /city-and-country-to-state/nederland/amsterdam
[country] => nederland
[1] => nederland
[city] => amsterdam
[2] => amsterdam
)
如何将 /country 和 /city 设为可选? 我想稍后检查一下,并在缺少其中一个参数时向客户显示一个很好的错误。
感谢您的帮助!
您可以将此正则表达式与可选组件一起使用:
^/city-and-country-to-state(?:/(?<country>[^/\n]+)(?:/(?<city>[^/\n]+))?)?/?$
RegEx Demo
代码:
preg_match_all(
'~^/city-and-country-to-state(?:/(?<country>[^/]+)(?:/(?<city>[^/]+))?)?/?$~um',
$input, $matches
);
我可能会使用更通用的东西,比如
/city-and-country-to-state(/[\p{L}\s]+)*
然后解析生成的组。如果有,那就把它当作一个国家。如果有两个,则将第二个视为城市。如果有 none,则显示错误信息。
这也更具可扩展性,因为您可以降低到更精细的特异性,而无需重新发明您的正则表达式。例如,如果你要为美国做这样的事情,那么你可以使用
/city-and-country-to-state/US/Atlanta
或者,要指定较小的城市,
/city-and-country-to-state/US/California/Atlanta
/city-and-country-to-state/US/Idaho/Atlanta
/city-and-country-to-state/US/Texas/Atlanta
我猜这对于您的特定用例可能没有意义(假设您似乎正在根据 country/city 解析状态)但我通常是不把自己画到角落里。