正则表达式帮助:包含/排除

时间:2011-02-03 16:08:49

标签: regex

你好我想弄清楚这个RegEx表达式。我有一个URL,可以在不同的位置具有不同的查询字符串参数。

test.aspx?foo=bar&abc=123
test.aspx?abc=123&foo=bar
test.aspx?foo=bar&abc=123#T1
test.aspx?abc=123&foo=bar#T2

我试图找到没有#Tnumber

的那个

这是我到目前为止所做的。

test.aspx\?(?!\#T[0-9])

然而它仍然会选择所有这些,有没有办法让字符串保持不变并将其扫描到线上?

Juniorflip

1 个答案:

答案 0 :(得分:0)

如果#Tnum总是在最后,你只需要做一些锚定。例如,像这样:

test.aspx\?.*(?!\#T[0-9])...$

但是这非常脆弱,因为它依赖于总是以非常特殊的形式结束的坏URL,并且好的URL总是有足够的字符来吸收那个结束匹配。负面的后瞻性断言稍好一些,但仍然脆弱且不太普遍支持:

test.aspx\?.*(?<!\#T[0-9])$

最好编写一个与你想要的匹配的正则表达式,并且只是在你得到一个匹配时反转你要做什么的逻辑(即“如果它匹配扔掉它“,而不是”如果它匹配使用它“)。但实际上,将URL解析委托给专门的库然后只需更简单地检查片段标识符作为逻辑组件而不是作为一个可怕的RE hack就更好了。