我尝试使用正则表达式来重写传入的 REST url,但当排除 URL 的一部分时,我陷入了一个用例。
这是我当前使用的正则表达式:
^(/[^/]+/(?:books))/([^/]+?)(?:/(?:(?!page).+?))?(?:/page/(\\d+))?$
作为示例,我使用 “$1 - $2 - $3” 作为编写新 URL 的部分。
以下是正常工作的示例...
"/mySite/books/topic1/page/2" results in "/mySite/books - topic1 - 2"
"/mySite/books/topic1/subtopic1/page/2" results in "/mySite/books - topic1 - 2"
以上所有工作均按预期进行。问题是,当 URL 排除 URL 的“topic1”部分时,结果不是我需要的。示例:
"/mySite/books/page/2" results in "/mySite/books - page - "
我需要的是$2为空,因为没有主题,页码仍然为$3。我需要作为输出...
"/mySite/books/page/2" results in "/mySite/books - - 2"
我可以在正则表达式中更改哪些内容来满足该场景,而不破坏正常工作的现有正则表达式?这是用 Java 完成的。
最佳答案
您可以尝试使用正则表达式模式
^(/[^/]+/books)/(?:(?!page/)([^/]+)/)?page/(\\d+)$
关于java - 排除字符串部分时的正则表达式反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13390006/