正则表达式或多个/单个字符

时间:2012-02-23 01:42:56

标签: regex

我正在动态制作正则表达式。

我希望它符合以下内容:

lem
le,,m
levm
lecm

基本上,“lem”但在m之前它可以有任意数量的,或任何一个角色。现在我有

le[\,]{0,}[.]?m
你可以看到它 http://regexr.com?303ne

它应匹配每一个,但第三个。

更新:我明白了:

le[\,]{0,}.?m

3 个答案:

答案 0 :(得分:9)

每当你在正则表达式中思考“或”时,你应该从交替开始:

a|b

匹配ab。所以

  

任意数量的字符列表或任何字符的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其中lem在我的附近添加