正则表达式:获取斜杠后面或最后一个点后面的两个字母

3

我想使用正则表达式提取一个国家的 ISO 代码(两个字母)。

例如,对于国家 Ireland ,ISO 代码是 ie。ISO 代码可以在斜杠 / 或者最后一个点号 .之后找到。

这是我的 RewriteRule

RewriteRule ^gallery/country(?:/[^/]*([a-zA-Z-9]{2}))?/?$ gallery/gallery.php?country=$1 [L,QSA]

以下是一些有效的网址... 如果可用,我想选取ISO代码:
gallery/country
gallery/country/
gallery/country/ie gallery/country/ie/
gallery/country/ireland
gallery/country/ireland/
gallery/country/ireland-love.ie gallery/country/ireland-love.ie/
gallery/country/ireland.69-love.ie/
我尝试调整我几乎用于所有SEO网址的模板公式,但是我在这一个上遇到了困难。以下是目前为止我所做的。
^gallery/country(?:/[^/]*([a-zA-Z-9]{2}))?/?$

https://regex101.com/r/88azeh/6

2个回答

3
请您根据所示示例尝试以下操作。将参考组中 . 之后的所有内容捕获,并在此处重写时使用它。请确保在测试任何URL之前清除浏览器缓存。
RewriteEngine ON
RewriteCond %{QUERY_STRING} ^$
RewriteRule \.([a-zA-Z]+){2}/?$ gallery/gallery.php?country=$1 [L]

上述代码不会检查URI的条件,若要更加具体地针对相册,请尝试以下方法。
RewriteEngine ON
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^gallery/country.*\.([a-zA-Z]+){2}/?$ gallery/gallery.php?country=$1 [L]

2

您可以使用

^gallery/country/(?:.*[/.])?([a-zA-Z]{2})/?$

请查看正则表达式演示。细节如下:

  • ^ - 开始输入
  • gallery/country/ - 一个字面字符串
  • (?:.*[/.])? - 可选模式匹配
    • .* - 除了换行符以外的任意零个或多个字符,尽可能多地匹配
    • [/.] - /.
  • ([a-zA-Z]{2}) - 第一组:两个 ASCII 字母
  • /? - 可选的 /
  • $ - 字符串结束。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接