如何在正则表达式中使用环顾四周?

时间:2019-07-16 17:41:28

标签: regex

我想比赛 { "atlas.zcustomer":{ "settings":{ "index":{ "number_of_shards":"5", "provided_name":"atlas.zcustomer", "creation_date":"1563288936515", "analysis":{ "filter":{ "my_stop_word":{ "type":"stop", "stopwords":[ "ith", "ihr", "san", "tic", "ltd", "de", "la", "s", "a", "inc", "logistics", "international" ] }, "my_length":{ "type":"length", "min":"3" } }, "analyzer":{ "my_fuzzy_analyzer":{ "filter":[ "my_length", "lowercase", "my_stop_word" ], "type":"custom", "tokenizer":"standard" } } }, "number_of_replicas":"1", "uuid":"KVI55mDhS4mtumpOqp4mjw", "version":{ "created":"6060099" } } } } } abc_def_ghiabc_abc_ghiabc_a2a_ghi 但不是abc_999_ghiabc_xxx_ghi位于中心)。

我想手动使用前瞻(xxx),但是我想知道是否还有其他方法可以不手动指定要跳过的字符数。

原始问题是带有数字的,已更新为字符串大小写。

3 个答案:

答案 0 :(得分:0)

如果您不想使用环顾四周,则可以选择以下表达式:

(?:abc_xxx_ghi)|(abc_.{3}_ghi)

除此之外,我别无其他。

DEMO

答案 1 :(得分:0)

您可以使用

123_(?:(?!000)\d){3}_789

enter image description here

Regex demo

答案 2 :(得分:0)

如果您不想确切指定要跳过的字符数,也许可以在否定的前瞻中使用+之类的量词,并使用否定的字符类来匹配下划线。

\babc_(?!x+_)[^_]+_ghi\b

说明

  • \babc_字边界,匹配abc _
  • (?!负向查找,断言直接在右边的不是
    • x+_匹配1次以上x,后跟下划线
  • )提前关闭
  • [^_]+_否定的字符类,与除_以外的任何字符匹配1倍以上
  • ghi\b匹配ghi和单词边界

Regex demo