首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php regex末尾有可选的char

php regex末尾有可选的char
EN

Stack Overflow用户
提问于 2018-05-28 17:47:39
回答 2查看 283关注 0票数 2

我有以下字符串

代码语言:javascript
复制
https://www.example.com/int/de

并且想要匹配url末尾的语言代码,例如'de‘我用这个正则表达式来做这件事

代码语言:javascript
复制
/\..*\/.*\/([^\/?]*)\/?$/gi

如果URL以斜杠结尾,我也希望得到相同的结果

但是使用https://www.example.com/int/de/时,我只得到一个完全匹配,但是组不再匹配'de‘,尽管在正则表达式中最后一个斜杠是可选的

有人能纠正我的错误吗?

EN

回答 2

Stack Overflow用户

发布于 2018-05-28 18:03:58

作为另一种选择,您可以考虑将parse_urlexplodertrim一起使用,以仅获取最后一部分。

代码语言:javascript
复制
$strings = [
    "https://www.example.com/int/de/",
    "https://www.example.com/int/de"
];
foreach ($strings as $string) {
    $parts = explode("/", rtrim(parse_url($string, PHP_URL_PATH), '/'));
    echo end($parts) . "<br>";
}

这将为您提供:

代码语言:javascript
复制
de
de
票数 2
EN

Stack Overflow用户

发布于 2018-05-28 17:50:24

问号matches zero or 1 character。你需要不止一个匹配"de“。尝试使用.*.+而不是?

顺便说一句,可能更易维护的RegEx应该是:/.*\/([^/]*)\/?$/gi

该正则表达式表示“匹配任何内容(.*),后跟一个正斜杠(\/),然后是非正斜杠的内容,零次或多次([^/]*),然后是可选的正斜杠(\/?),然后是文本结尾($)”。这样,最后一个正斜杠和语言部分之前的所有字符都将在正则表达式的“match anything”部分中匹配。请注意表示语言匹配的部分周围的圆括号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50563485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档