我正在动态制作正则表达式。
我希望它符合以下内容:
lem
le,,m
levm
lecm
基本上,“lem”但在m之前它可以有任意数量的,
或任何一个角色。现在我有
le[\,]{0,}[.]?m
你可以看到它
http://regexr.com?303ne
它应匹配每一个,但第三个。
更新:我明白了:
le[\,]{0,}.?m
答案 0 :(得分:9)
每当你在正则表达式中思考“或”时,你应该从交替开始:
a|b
匹配a
或b
。所以
任意数量的字符列表或任何字符的1个
可以完全翻译成
[...]*|.
其中...
是要匹配的字符列表(字符类)。如果将其用作较长表达式的一部分,则需要使用括号,因为连接比变更更强(优先级更高):
le([,]*|.)m
因为角色类只有一个项目,我们可以简化这个:
le(,*|.)m
请注意,.
默认表示“任何字符,但换行符”。
答案 1 :(得分:2)
这个怎么样:
le(,*|.?)m
它应该做你想要的。
答案 2 :(得分:0)
这个怎么样:
([^,])(?=\\1)
但这恰恰相反:-)不确定你是否可以
<强> UPD 强>:
这应该适合你:
~^(?:,|([^,])(?!\\1))+$~
不确定您正在寻找什么方言,但它适用于PCRE:http://ideone.com/6Q3Wk
<强> UPD2 强>:
相同的正则表达式包含在另一个
中$r = '(?:,|([^,])(?!\\1))+';
var_dump(preg_match('~le' . $r . 'm~', 'leem'));
在这种情况下,最终表达式变为:le(?:,|([^,])(?!\\1))+m
其中le
和m
在我的附近添加