使用正则表达式匹配一系列非空的分隔字符串

Matching a sequence of non-empty, delimited strings with a Regular Expression

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

模式是:

一系列连续的任意单词,标有前缀和后缀。单词里面至少要有一个字符.

我的意思是,假设前缀是"AB",后缀是"YZ"。使用此输入:

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

匹配的组应该是:

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

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

我试过

(AB(.*?)YZ)+

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

(AB(.+?)YZ)+

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

AB----YZAB_____YZABYZ//AB++YZ和AB====YZAB---YZ

我尝试了许多其他更复杂的正则表达式,但没有成功。

任何帮助将不胜感激!

您可以使用

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

参见regex demo

详情

  • (?:AB(?:(?!AB).)+?YZ)+ - 重复一次或多次
    • AB - AB 子串
    • (?:(?!AB).)+?(或(?:(?!AB|YZ).)+)-除换行符以外的任何字符,重复 1 次或多次,尽可能少,不会开始 AB 字符序列(一个所谓的)
    • YZ - YZ 子串。