所以我有以下正则表达式:
https?://(www'.)?flickr'.com/photos/(.+)/?
与以下URL匹配:
http://www.flickr.com/photos/username/
如何阻止最后一个正斜杠(/
(包含在用户名子模式(.+)
中?
我试过:
https?://(www'.)?flickr'.com/photos/(.+?)/?
但是它只匹配用户名的第一个字母。
https?://(?:www'.)?flickr'.com/photos/([^/]+)/?
我在第一组中添加了?:
,所以它不会被捕获,然后在最后一场比赛中使用[^/]
而不是点。这样可以确保"照片/"和下一个"/"之间的所有内容都被捕获。
如果您需要捕获第一个www
,只需使用以下内容:
https?://(www'.)?flickr'.com/photos/([^/]+)/?
您需要确保它不匹配正斜杠:
https?://(?:www'.)?flickr'.com/photos/([^/]+)/?
您也可以使regex变得懒惰(我想这就是您在使用(.+?)
语法时所做的(,但以上操作将很好地进行
将(.+)
更改为([^/]+)
。这将匹配,直到它遇到/
,所以您可能也想在类中抛出一些其他东西。
通常有两种方法:
附加一个问号,使匹配的不贪婪。.*
将尽可能多地匹配,.*?
将尽可能少地匹配。
排除下一个要匹配的字符。如果要在/
上停止,请使用[^/]*
。
如果您知道后面会有一个斜杠,请取出最后的?
。