我有一个正则表达式,我需要过滤包含单词
的邮件免费提供,grátis,grétis,grâtis,grôtis......
所以我认为这应该很简单,就像/gr.tis/一样,但它不起作用。我在Centos上使用这个正则表达式使用postfix来过滤电子邮件。
问题是如果邮件包含“免费”,它会被过滤,但如果它包含“grátis”或“grétis”......则不会。发生了什么事?
EDIT 由于某种原因。{1,5}工作。为什么呢?
答案 0 :(得分:0)
尝试这样/gr.*tis/
。它似乎是由特殊字符引起的编码问题,即“á”,“ô”,......
答案 1 :(得分:0)
我会选择一些更健壮的东西......
(?<=\b)(g|G)r(.)tis(?=\b)
如果您使用
gr.[^ -~]{0,4}tis
然后你将匹配像lksdfkjhasgratisaljsdhfkjsdf这样的单词中的“免费”,因为免费提供在它的中间,正则表达式不足以知道免费只是单词的一部分而不是单词本身。所以你最终会得到误报和数字膨胀。
不仅如此,你永远不会匹配 -
GratisGrátisGrétisGrâtis或Grôtis
编辑我的答案以改善所采取的步骤
答案 2 :(得分:0)
正如我的评论所说:
用.
替换.{1,5}
的原因在于,正在读取字符串的引擎是将非ASCII字母/符号读取为非实际字符(即,它可能是unicode字符)象\u00FF
或其他)的符号表示
这就是guilhermerama的答案:/gr.*tis/
并将.
令牌替换为多个实例的原因。