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 に答える