如何构造一个前面没有特定字符的正则表达式

How to construct a regex which is not preceded by a specific character?

本文关键字:字符 正则表达式 前面 何构造 一个      更新时间:2023-10-16

我正在用c ++准备一个PCRE正则表达式。我想准备一个正则表达式,其中不应在前面加上特定字符。

假设我有以下输入字符串:

Str1 = "www.host.com/abc/files/my.pdf" 
Str2 = "www.host.com/abc/files/takeprint.jsp?filenam=my.pdf" 

正则表达式的外观与 Str1 匹配,但与 Str2 不匹配。

我尝试遵循正则表达式,但它不起作用。

regex = "(.+)my(.*)(?<!?)pdf$"

在开始时使用负面的前瞻。

^(?!.*?.*.pdf$).+my.pdf$

演示

这是一个我认为可以解决问题的正则表达式:

.*/([^?]+?.pdf$)

它会贪婪地匹配任何东西,直到最后/.在此之后,它将捕获不包含?的任何长度的字符串,只要字符串的末尾以 .pdf 结尾。

重要的部分是字符集[^?]它涵盖了任何不是问号的字符。