0

试图提出一个匹配不以国家前缀开头的 uri 路径的正则表达式。以下用例是一个示例:

'^/$'          == true
'^/es$'        == false
'^/es/$'       == false
'^/es/.*$'     == false
'^/escro.*$'   == true
'^/lies$'      == true # newish
'^/lies/$'     == true # newish
'^/fr$'        == false
'^/fr/$'       == false
'^/fr/.*$'     == false
'^/freedom/$'  == true
'^/it$'        == false
'^/it/$'       == false
'^/it/.*$'     == false
'^/item/.*$'   == true
'^/foo/bar/$'  == true

摘要:应该匹配任何不通过 "^/(fr|it|es)$" 或 "^/(fr|it|es)/.*$" 的 URL

4

1 回答 1

2

这是一个对我有用的更紧凑的版本:

^/[^/]*(?<!/(?:es|fr|it))(?:/.*?)?$

我使用 PHP 引导程序对其进行了测试,您可以从演示中看到它通过了所有测试用例。

正则表达式:

^               - Start of string
/               - Match a forward slash
[^/]*           - Match anything that's not a forward slash, 0 or more times
(?<!            - Negative lookbehind making sure
  /(?:es|fr|it) -      We didn't match a forward slash followed by (es|fr|it)
)   
(?:/.*?)?       - Match a forward slash followed by any number of characters, optionally
$               - End of string
于 2012-07-17T20:54:26.780 回答