栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Elasticsearch上使用负前瞻正则表达式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Elasticsearch上使用负前瞻正则表达式

您可以使用以下两种方法之一来解决此问题:

"value": "~(charge|enpre|relate)night~(charge|enpre|relate)",

要么

.*night.*&~(.*(charge|enpre|relate).*)

带可选的(因为 默认情况下 为ON )

"flags" : "ALL"

它是如何工作的?

在常见的NFA正则表达式中,通常会有负面的环顾四周,以帮助限制更通用的模式(看起来像

(?!...)
或的样式
(?<!...)
)。但是,在ElasticSearch中,您需要使用特定的
可选运算符

~
(波浪号)是 补体 被用于*后它否定的原子权。原子可以是单个符号,也可以是一组内的一组子图案/替代物。

请注意,默认情况下,所有ES模式都锚定在字符串的开头和结尾,您无需在Perl式和.NET以及其他NFA中使用它们,

^
并且不需要使用它们
$

从而,

  • ~(charge|enpre|relate)
    -匹配字符串开头以外的任何文本
    charge
    enpre
    并且
    relate
  • night
    -匹配单词
    night
  • ~(charge|enpre|relate)
    -匹配除3个子字符串之外的任何文本,直到字符串末尾。

在像Perl这样的NFA正则表达式中,您可以使用经过调节的贪婪令牌来编写该模式:

/^(?:(?!charge|enpre|relate).)*night(?:(?!charge|enpre|relate).)*$/

第二种模式比较棘手:匹配时,常见的NFA正则表达式通常不会从一个位置跳到另一个位置,因此,通常使用锚定在文本开头的前瞻符号。在这里,使用
INTERSECTION, 我们只能使用2种模式,其中一种将与字符串匹配, 第二种也应与字符串匹配。

  • .*night.*
    -匹配整个线路(如
    .
    匹配任何象征,而是一个换行符,否则,使用
    (.|n)*
    ),用
    night
  • &
    -
  • ~(.*(charge|enpre|relate).*)
    -不也行
    charge
    enpre
    relate
    子在里面。

类似NFA Perl的正则表达式看起来像

/^(?!.*(charge|enpre|relate)).*night.*$/


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号