我试图编写一个正则表达式垃圾邮件过滤器,它会阻止这样的主题:
Subject:
..B..R..E_G-U E_T..___W..A..T..C..H-E S -_A T-___C H_E-A..P___P R-I_C E! .
-G_U..C..C_I..-..W_A_T C-H E_S---..A..T __C-H..E A P_--..P_R..I C..E
..C_H..O_P..A_R D---W-A T-C_H E S -- A_T.._-C..H-E A P_--P..R..I C_E!
我能够提出:
w([^a-zA-Z0-9]){1,3}a([^a-zA-Z0-9]){1,3}t([^a-zA-Z0-9]){1,3}c([^a-zA-Z0-9]){1,3}h([^a-zA-Z0-9]){1,3}e([^a-zA-Z0-9]){1,3}s([^a-zA-Z0-9]){1,6}
将标准变体捕获到" watch",但我怀疑如果它们开始使用Unicode拼写,它会捕获它们。更不用说它不仅不优雅,它的丑陋我的猫试图掩埋它!
什么是更好的方式?
看起来Mozilla正在使用Javascript格式的正则表达式 - http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
答案 0 :(得分:1)
看起来你的正则表达式会起作用,但是如果你只想清理一些,试试这个:
w[\W_]+a[\W_]+t[\W_]+c[\W_]+h[\W_]+e[\W_]+s
我不会考虑更优雅,但它更清洁。
使用\W
表示“非单词字符”(它是[^A-Za-z0-9_]
的简写),与_
结合使用,结果与您的结果相同:[^A-Za-z0-9]
。
使用+
而不是具有特定金额的量词,因为它可能会有所不同,实际上每个点中至少有一个会表示垃圾邮件。
如果你想尝试更优雅的东西尝试以相同的模式捕捉其他主题(这是正则表达式的优点),请使用:
(\w[\W_]+){4,}