2015-11-06 215 views
2

我有我需要过滤包含单词正则表达式和特殊字符

免费消息的正则表达式,免费,grétis,免费,grôtis......

所以我thinkg这应该是很容易就像/gr.tis/,但它不起作用。我在Centos上使用这个正则表达式来使用postfix过滤电子邮件。

问题是,如果邮件包含“免费”它会被过滤,但如果它包含“grátis”或“grétis”...它不会。到底是怎么回事?由于某种原因,编辑 {1,5}工作。为什么?

+0

'/ gr..tis /'做了什么? – shawnt00

+0

看看这个类似问题的答案:http://stackoverflow.com/a/26900132/201706 –

+0

@ shawnt00没有工作。 Mike P我会立即尝试你的建议。 – Samul

回答

0

由于步数在我的评论说: :

替换..{1,5}工程的原因是什么引擎是ading字符串是阅读非ASCII字符/符号,比他们的实际字符(即,它可以像\u00FF什么符号的Unicode字符表示)

这就是为什么guilhermerama的答案以外的东西:/gr.*tis/和替换.令牌可以在多个实例中使用。

+0

您可能使用UTF-8编码的数据。使用(8位)ASCII例程处理时,Unicode的UTF-8编码设计为可以很好地工作(但不完美)。 (例如使用UTF-8,与ASCII一样,在表示文本的流中不会出现零字节)。重音字符(如'á'(Unicode码点十进制225或十六进制0xE1)是UTF-8编码,字节为0xC3 0xA1,一个期望ASCII的例程可能会将其解释为两个字符'Ã'和'¡'。 (真正的ASCII是一个7位的代码,所以在这里以8位ASCII表示,我的意思是一些8位的ASCII扩展,如ISO 8859-1/Latin-1字符集。) – Rhubbarb

0

请尝试像这样/gr.*tis/。这似乎是造成特殊字符,即“A”,“O”的编码问题,...

+1

WORKED!但问题是,thi信息也将被过滤掉“eu GRovei arTISta muito bem” – Samul

0

我会选择一些更强大的...

(?<=\b)(g|G)r(.)tis(?=\b) 
  • 这将在字符串的开头或中间找到该词
  • 搜索大写G或小写字母g
  • 在空格,行尾或非单词字符(如“,”或“ “。

如果使用

gr.[^ -~]{0,4}tis 

然后你会因为免费是在它的中间和正则表达式是不足以了解,免费提供匹配像lksdfkjhasgratisaljsdhfkjsdf一个字“免费”只是一个组成部分的词而不是词本身。所以你最终会得到误报和虚高的数字。

不仅如此,但你永远不会匹配 -

免费提供无偿Grétis免费或Grôtis

编辑我的回答对改善所采取

+0

真的很不错,这真的是很好的答案,但为什么我不能使用gr([^] +)tis? – Samul

+0

,因为你不会匹配免费或任何其他国会大厦G形式的单词。你也会匹配每一个在Gratisography(实际上就是一个词)这个词中无偿的单词,因为“gr([^] +)tis”没有界限......所以不这样做的原因是因为你会都会错过单词,并会匹配你不想要的单词 – Nefariis

+0

向你展示一个这样的例子 - 这是我的代码https://regex101.com/r/bK0hJ0/1 ...这将是其他代码https:/ /regex101.com/r/eR6uH4/1 ...注意其他代码错了很多 – Nefariis

相关问题