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

时间:2015-03-10 12:07:01

标签: c++ regex pcre

我正在用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$"

2 个答案:

答案 0 :(得分:0)

在开始时使用否定前瞻。

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

DEMO

答案 1 :(得分:0)

这是我认为可以解决问题的RegEx:

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

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

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