如何在 app.yaml 中使用正则表达式处理虚拟子目录?
How can I handle virtual subdirectories with regex in app.yaml?
我想将 "single subdirectories" 的所有访问者指向一个页面,将 "double subdirectories" 的所有访问者指向另一个页面。例如:
/foo/
/new/
/north/
/1-j4/
会全部指向1.app,而
/foo/bar/
/new/york/
/north/west/
/1-j4/a_990/
都会指向2.app。
我想我可以用非贪婪的正则表达式匹配来做到这一点,就像这样:
- url: /(.*?)/$
script: 1.app
- url: /(.*?)/(.*?)/$
script: 2.app
令我困惑的是,/foo/ 和 /foo/bar/ 都解析为脚本 1.app。 "lazy" 正则表达式是否强制自己包含中间的 /,因为这是获得匹配的唯一方法?我还能怎么做?我试过使用 (\w*?) 但得到了相同的结果。
.*?
仍将匹配任意数量的 /
,因为 .
匹配除换行符以外的任何字符(默认情况下)。您需要将正则表达式基于否定字符 class、[^/]*
,匹配 /
.
以外的 0 个或更多字符
要将目录与一个部分匹配,请使用 ^([^/]*)/?$
,要将目录与两个部分匹配,请使用 ^([^/]*)/([^/]*)/?$
。
请注意,如果您计划在在线 Web 测试器中使用这些模式,则必须在大多数模式中转义 /
,因为默认情况下它们使用 /
符号作为正则表达式分隔符。
是的,(.*?)
包含斜杠,因此将解析为 1.app
。如果你把 2.app
处理程序放在第一位,它应该会做你想做的事:
- url: /(.*?)/(.*?)/$
script: 2.app
- url: /(.*?)/$
script: 1.app
我想将 "single subdirectories" 的所有访问者指向一个页面,将 "double subdirectories" 的所有访问者指向另一个页面。例如:
/foo/
/new/
/north/
/1-j4/
会全部指向1.app,而
/foo/bar/
/new/york/
/north/west/
/1-j4/a_990/
都会指向2.app。
我想我可以用非贪婪的正则表达式匹配来做到这一点,就像这样:
- url: /(.*?)/$
script: 1.app
- url: /(.*?)/(.*?)/$
script: 2.app
令我困惑的是,/foo/ 和 /foo/bar/ 都解析为脚本 1.app。 "lazy" 正则表达式是否强制自己包含中间的 /,因为这是获得匹配的唯一方法?我还能怎么做?我试过使用 (\w*?) 但得到了相同的结果。
.*?
仍将匹配任意数量的 /
,因为 .
匹配除换行符以外的任何字符(默认情况下)。您需要将正则表达式基于否定字符 class、[^/]*
,匹配 /
.
要将目录与一个部分匹配,请使用 ^([^/]*)/?$
,要将目录与两个部分匹配,请使用 ^([^/]*)/([^/]*)/?$
。
请注意,如果您计划在在线 Web 测试器中使用这些模式,则必须在大多数模式中转义 /
,因为默认情况下它们使用 /
符号作为正则表达式分隔符。
是的,(.*?)
包含斜杠,因此将解析为 1.app
。如果你把 2.app
处理程序放在第一位,它应该会做你想做的事:
- url: /(.*?)/(.*?)/$
script: 2.app
- url: /(.*?)/$
script: 1.app