用正则表达式匹配一系列非空,定界字符串

时间:2019-01-24 17:13:54

标签: regex regex-negation regex-lookarounds regex-group regex-greedy

我不是正则表达式的专家,并且在匹配特定模式时遇到严重问题。

模式是:

连续的任意单词序列,带有前缀和后缀。单词内至少应包含一个字符

我的意思是,假设前缀为“ AB”,后缀为“ YZ”。输入以下内容:

AB----YZAB====YZABYZ//AB++YZ,,,AB====YZAB---YZ

匹配的组应为:

AB ---- YZAB ==== YZ,AB ++ YZ,AB ==== YZAB --- YZ

ABYZ组不应该匹配,因为它是“空的”(前缀和后缀之间没有任何内容。

我尝试过

(AB(.*?)YZ)+

但是ABYZ被检测为序列的一部分,因为“ *”可能不匹配。如果我强制将非空组与

一起使用
(AB(.+?)YZ)+

但仍然没有锁定,它可以检测到组

AB ---- YZAB _____ YZABYZ // AB ++ YZ和AB ==== YZAB --- YZ

我尝试了许多其他更复杂的regExps,但是没有运气。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以使用

(?:AB(?:(?!AB).)+?YZ)+

请参见regex demo

详细信息

  • (?:AB(?:(?!AB).)+?YZ)+-重复一个或多个
    • AB-一个AB子字符串
    • (?:(?!AB).)+?(或(?:(?!AB|YZ).)+)-除换行符以外的任何char,一个或多个重复(尽可能少的重复)不会启动AB char序列( -称为tempered greedy token
    • YZ-一个YZ子字符串。