首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex和特殊字符

Regex和特殊字符
EN

Stack Overflow用户
提问于 2015-11-06 16:03:03
回答 3查看 97关注 0票数 2

我有一个正则表达式,我需要过滤包含单词的消息。

免费,grátis,grétis,gr tis,gr tis.

因此,我认为这应该很容易,就像/gr.tis/但它不起作用。我使用这个regex对Centos使用后缀过滤电子邮件。

问题是,如果消息包含“免费”,它会被过滤,但如果它包含"grátis“或”grétis“.但事实并非如此。怎么一回事?

由于某种原因编辑。{1,5}已生效。为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-06 18:07:48

正如我在评论中所说:

.替换为.{1,5}的原因是,是哪个引擎正在读取非ASCII字母/符号,而不是它们的实际字符(例如,它可能是\u00FF之类的符号的unicode字符表示)。

这就是为什么/gr.*tis/和替换.令牌以获取多个实例的答案是有效的。

票数 0
EN

Stack Overflow用户

发布于 2015-11-06 16:13:39

试着像这样/gr.*tis/。这似乎是由特殊字符引起的编码问题,即"á“、”a“、.

票数 0
EN

Stack Overflow用户

发布于 2015-11-06 18:02:46

我会选择更有活力的.

代码语言:javascript
复制
(?<=\b)(g|G)r(.)tis(?=\b)
  • 这将在字符串的开头或中间找到单词,
  • 搜寻大写G或小写g
  • 在空格、行尾或非单词字符如“、”或“”之前停止。

如果您使用

代码语言:javascript
复制
gr.[^ -~]{0,4}tis

然后,您将匹配像lksdfkjhasgratisaljsdhfkjsdf这样的单词中的“免费”,因为免费的在其中,而regex不足以知道免费的只是单词的一部分,而不是单词本身。所以你最终会得到假阳性和一个膨胀的数字。

不仅如此,你永远也比不上-

免费Grátis Grétis Gr tis或Gr tis

编辑了我的答案以改进所采取的步骤

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33570824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档