0

我正在尝试匹配一组数据,但如果它在查询中包含某些字符串则不匹配:

我不想允许的字符串是

/hd/805
/hd/864
/hd/999
/hd/???????debugUser??????
/hd/208?debugUser=test&MediaCode=XXXXX&CMP=XXXXX
/hd/208?debugUser=john&MediaCode=XXXXX&CMP=XXXXX

但我确实想匹配其他所有内容

/hd/123
/hd/654?test=test

ETC

我有这个正则表达式来排除第一部分/hd/(?!864)(?!805)(?!999)[0-9]+

但如果字符串包含 debugUser,我无法捕捉到它

我努力了/hd/(?!864)(?!805)(?!999)[0-9]+\??(?!\?debugUser.*).*

但这仍然包括网址

有人有想法吗?

此正则表达式将与谷歌分析一起使用。

4

2 回答 2

0

你可以做的是使用这个正则表达式:/hd/(805|864|999|208|\?\?\?\?\?\?\?debugUser\?\?\?\?\?\?)来匹配你想要的,如果它匹配然后忽略它。所以你的伪代码看起来像 -

for(String url : urls){
    if(regex.matches(url) continue;
    //else do processing
}
于 2013-06-18T15:46:56.357 回答
0

您可以尝试使用此模式来检查仅包含 uri 的多行模式中的字符串或行:

^\/hd\/(?:[0-7]|8(?!05\b|64\b)|9(?!99\b))\d*(?:\?(?:[^d\s]+|d+(?!ebugUser))+)?$

或者在一个更大的字符串中找到你想要的字符串:

(?<=^|["']|\s)\/hd\/(?:[0-7]|8(?!05\b|64\b)|9(?!99\b))\d*(?:\?(?:[^d\s]+|d+(?!ebugUser))+)?(?=\s|['"]|$)

对于这个,不要忘记转义您使用的引号(单引号或双引号)。

于 2013-06-18T16:29:52.447 回答