我不是正则表达式的专家,并且在匹配特定模式时遇到严重问题。
模式是:
连续的任意单词序列,带有前缀和后缀。单词内至少应包含一个字符。
我的意思是,假设前缀为“ 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,但是没有运气。
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以使用
(?:AB(?:(?!AB).)+?YZ)+
请参见regex demo。
详细信息
(?:AB(?:(?!AB).)+?YZ)+
-重复一个或多个
AB
-一个AB
子字符串(?:(?!AB).)+?
(或(?:(?!AB|YZ).)+
)-除换行符以外的任何char,一个或多个重复(尽可能少的重复)不会启动AB
char序列( -称为tempered greedy token)YZ
-一个YZ
子字符串。