匹配逗号分隔列表中两个单词之间的每个项目



我有一个逗号分隔的数字,我想匹配START之后或之前的每个项目,如果存在任何关键字,END

我使用

(?:.*?START|END.*)(*SKIP)(*F)|d+

除了那些START出现在END或多个START实例之后并END存在的。

输入匹配
123,45678,789,777,888,1234123456787897778881234
123,START,789,777,888,12347897778881234
123,45678,789,777,END,123412345678789777
123,START,789,777,END,1234789777
123,END,789,777,START,1234123
123,START,789,START,777,END,1234789777
123,START,789,END,777,END,1234789
123,END,789,START,777,END,1234123

您可以通过添加限制来查找前面没有ENDSTART来修复模式:

(?:^(?:(?!END).)*?START|END.*)(*SKIP)(*F)|d+
// ^^^^^^^^^^^^^^^

请参阅正则表达式演示。

在这里,^(?:(?!END).)*?START(而不是.*?START)匹配

  • ^- 字符串的开头
  • (?:(?!END).)*?- 除换行符字符外,尽可能少地不启动END字符序列的字符
  • START-START字符序列。

您也可以使用

(?:G(?!A)|^(?:(?:(?!END).)*?START)?)(?:(?!END).)*?Kd+

请参阅正则表达式演示。

详情

  • (?:G(?!A)|^(?:(?:(?!END).)*?START)?)- 前一个成功匹配的结束(G(?!A))或(|)字符串(^)的开头,然后是任何文本的可选出现,直到第一次出现START之前没有END((?:(?:(?!END).)*?START)?)
  • (?:(?!END).)*?- 除换行符字符外的任何字符,零次或多次,但尽可能少,不启动END字符序列
  • K- 匹配重置运算符,丢弃到目前为止从整体匹配内存缓冲区匹配的所有文本
  • d+- 一个或多个数字。

相关内容

  • 没有找到相关文章

最新更新