以逗号分隔的重复

ajw*_*ood 10 regex

我有一个很长的正则表达式来匹配我正在处理的列表中的条目.该列表应该是逗号分隔的一个或多个条目.考虑一个正则表达式:

([abc]+|[123]+)
Run Code Online (Sandbox Code Playgroud)

进入.为了匹配我的逗号分隔列表,我匹配这样的事情:

([abc]+|[123]+)(,([abc]+|[123]+))*
Run Code Online (Sandbox Code Playgroud)

(我讨厌的正则表达式看起来特别愚蠢,而不是我在这里用来举例说明的短正则表达式)

我觉得必须有一个更好的方法,而不是有两个条目的副本 - 一次为第一个条目,再次和逗号/条目对.

Jus*_*gan 7

看起来你想要反向引用.

([abc123])(,\1)*
Run Code Online (Sandbox Code Playgroud)

而且,仅供参考,[abc]|[123]相当于[abc123].


编辑:根据您的编辑,我想我误解了您的尝试.试试这个:

([abc123]+(,|$))*
Run Code Online (Sandbox Code Playgroud)

或者如果你想减少限制:

([^,]+(,|$))*
Run Code Online (Sandbox Code Playgroud)

这匹配逗号分隔的非逗号字符串.一种更简单的方法本身就是全球匹配[^,]+.在JavaScript中,它看起来像这样:

myString.match(/[^,]+/g) //or /[abc123]+/g, or whatever
Run Code Online (Sandbox Code Playgroud)

或者你可以用逗号分开:

myString.split(/,/)
Run Code Online (Sandbox Code Playgroud)


Bra*_*tie 6

也许是这样的:

((?!=^|,)([abc123]))+
Run Code Online (Sandbox Code Playgroud)

拆下来就是:

(                       # start of parent capture
  (?!=^|,)                # look ahead and find either the start of a line or a comma
  ([abc123])              # actual pattern to look for (token)
)+                      # say this whole pattern is repeatable
Run Code Online (Sandbox Code Playgroud)

PHP 演示(最简单的演示方式)