我有一个很长的正则表达式来匹配我正在处理的列表中的条目.该列表应该是逗号分隔的一个或多个条目.考虑一个正则表达式:
([abc]+|[123]+)
Run Code Online (Sandbox Code Playgroud)
进入.为了匹配我的逗号分隔列表,我匹配这样的事情:
([abc]+|[123]+)(,([abc]+|[123]+))*
Run Code Online (Sandbox Code Playgroud)
(我讨厌的正则表达式看起来特别愚蠢,而不是我在这里用来举例说明的短正则表达式)
我觉得必须有一个更好的方法,而不是有两个条目的副本 - 一次为第一个条目,再次和逗号/条目对.
看起来你想要反向引用.
([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)
也许是这样的:
((?!=^|,)([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 演示(最简单的演示方式)