正则表达式问题 - 按ID选择结果

时间:2010-01-13 16:54:28

标签: regex

以下是我的正则表达式问题:如何选择具有特定ID的所有结果,例如“... ID = 99”,但不包括结果,使用额外的数字,如ID =“990”或“ID = 9923”。 但是,如果字符串计数与另一个非数字字符(“&”),例如“...... ID = 99& PARAM = 9290”也应包括在内。

我完全混淆了把它变成了一个正则表达式的选择。我非常感谢你的任何想法!

(顺便说一句,如果你真的进入正则表达式。你是如何学习它的?任何推荐的资源,书籍,教程?)

注意:我使用此功能在Google Analytics中过滤搜索结果,因为您可以在“过滤页面”表单中实际使用正则表达式。也许这对你有用。

4 个答案:

答案 0 :(得分:1)

使用\ b,字边界,即

ID = 99个\ B'/ P>

对于书籍Regular Expression Recipes: A Problem-Solution Approach是一个很好的书。

答案 1 :(得分:1)

回答你问题的第二部分:

就书籍而言,O'Reilly的Regular Expression Cookbook太棒了。前几章几乎涵盖了所有基础知识,然后是一些。本书的其余部分是具体的例子。

答案 2 :(得分:1)

ID=99(?!\d)

(?!\d)negative lookahead;它断言要么下一个字符不是数字没有下一个字符。你没有说你正在使用什么样的正则表达式,但大多数所谓的Perl兼容口味都支持前瞻。

至于学习资源,regular-expressions.info的教程是一个很好的起点。对于高级研究,其他人推荐的Goyvaerts-Levithan书非常好,但Mastering Regular Expressions仍然是最好的。如果你能负担得起他们两个;你不会后悔的。

编辑:为安全起见,您可能希望使用\bID=99(?!\d)来避免匹配FOO_ID=99之类的内容。

答案 3 :(得分:0)

这将匹配ID = 99和ID = 99,后跟一个非数字字符。

ID=99(:?\D)?

如果99只是一个示例,并且您想要匹配任何两位数字,则可以使用:

ID=\d{2}(:?\D)?