java - 排除字符串部分时的正则表达式反向引用

标签 java regex

我尝试使用正则表达式来重写传入的 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/

相关文章:

java - 对 Path2D 的绘图进行动画处理

javascript - @RequestParam 不接受请求发送的字符串中的 '&',存储 & 之前的所有字符并 chop 其余字符

java - 如何在字符串中使用正则表达式转义 '\'?

javascript - 检查字符串的第一个字符是否为数字会报错,表明 charat 不是有效方法

c# - 需要 wpf lostfocus 事件的正则表达式

php - 匹配实际模式之前的空白字符的正则表达式 - PHP

java - 没有找到类定义

java.sql.SQLException : Closed Resultset: next

java - 在 VideoView 上叠加图像(在 Canvas 上)?

regex - Notepad++ REGEX 查找并替换倒数第二个斜杠