我有一个正则表达式,我需要过滤包含单词的消息。
免费,grátis,grétis,gr tis,gr tis.
因此,我认为这应该很容易,就像/gr.tis/但它不起作用。我使用这个regex对Centos使用后缀过滤电子邮件。
问题是,如果消息包含“免费”,它会被过滤,但如果它包含"grátis“或”grétis“.但事实并非如此。怎么一回事?
由于某种原因编辑。{1,5}已生效。为什么?
发布于 2015-11-06 18:07:48
正如我在评论中所说:
将.替换为.{1,5}的原因是,是哪个引擎正在读取非ASCII字母/符号,而不是它们的实际字符(例如,它可能是\u00FF之类的符号的unicode字符表示)。
这就是为什么/gr.*tis/和替换.令牌以获取多个实例的答案是有效的。
发布于 2015-11-06 16:13:39
试着像这样/gr.*tis/。这似乎是由特殊字符引起的编码问题,即"á“、”a“、.
发布于 2015-11-06 18:02:46
我会选择更有活力的.
(?<=\b)(g|G)r(.)tis(?=\b)如果您使用
gr.[^ -~]{0,4}tis然后,您将匹配像lksdfkjhasgratisaljsdhfkjsdf这样的单词中的“免费”,因为免费的在其中,而regex不足以知道免费的只是单词的一部分,而不是单词本身。所以你最终会得到假阳性和一个膨胀的数字。
不仅如此,你永远也比不上-
免费Grátis Grétis Gr tis或Gr tis
编辑了我的答案以改进所采取的步骤
https://stackoverflow.com/questions/33570824
复制相似问题