正则表达式匹配PHP

时间:2015-05-19 04:53:14

标签: php regex amazon-s3

我正在尝试使用CloudFront网址替换网址。

例如。 URL可以是

https://s3.amazonaws.com/bucket/folder/d05c229a73b5c6f169d599652015b1.png

https://s3.amazonaws.com/bucket-with-hyphen/folder/folder1/d05c229a73b5c6f169d599652015b1.png

https://s3.amazonaws.com/bucket-with-hyphen/folder-with-hyphen/folder1/d05c229a73b5c6f169d599652015b1.png

然后我会用:

preg_replace($pattern, $replacement, $string)

我的$replacement将为$1cloudfront.net/$4';

到目前为止,这是我的$pattern

^(https?:\/\/)(s3.amazonaws.com)\/(\w+-\w+-\w+)\/(<I want the rest of the url>)

它只会匹配bucket-with-hyphen,但不会匹配bucket-with&amp;我不知道如何捕获URL的其余部分。

2 个答案:

答案 0 :(得分:1)

这是您更新的正则表达式,它捕获“桶”,“桶与”或“桶与任何东西”,但不匹配“桶与其他东西”。如果您需要捕获第4个选项,请将{0,2}更改为*

我只添加了可选的非捕获组(0或2次出现):

^(https?:\/\/)(s3.amazonaws.com)\/(\w+(?:-\w+){0,2})\/(.*)
                                       ^ ^ ^    ^

请参阅the regex demoIDEONE demo

答案 1 :(得分:0)

您可以使用以下内容进行匹配:

(?<=\/)(?:\w+-)+\w+(?=\/)   //no need to capture whole url here

并替换为cloudfront.net

请参阅DEMO