preg_replace如何改变uri的一部分

x_m*_*ras 0 php regex preg-replace

我试图用php preg_replace更改html的所有链接.所有的uris都有以下形式

http://example.com/page/58977?forum=60534#comment-60534
Run Code Online (Sandbox Code Playgroud)

我想将其更改为:

http://example.com/60534
Run Code Online (Sandbox Code Playgroud)

这意味着删除"page"之后和"comment-"之前的所有内容,包括这两个字符串.

我尝试了以下内容,但它没有返回任何更改:

$result = preg_replace("/^.page.*.comment-.$/", "", $html);
Run Code Online (Sandbox Code Playgroud)

但似乎我的正则表达式语法不正确,因为它返回html不变.你能帮帮我吗?

Mar*_*ers 6

^是一个只匹配字符串开头的锚点,只$在末尾匹配.为了匹配你不应该锚定正则表达式:

$result = preg_replace("/page.*?comment-/", "", $html);   
Run Code Online (Sandbox Code Playgroud)

请注意,这可以匹配不是URL的内容.您可能希望更具体地了解将要替换的内容,例如,您可能只想替换以任一http:https:以及不包含空格的链接.