我正在动态地创建一个正则表达式。
我希望它能匹配以下内容:
lem
le,,m
levm
lecm
基本上,"lem"之前的m可以有任意数量的,
,或者任意一个字符。目前我的文本是:
le[\,]{0,}[.]?m
您可以在http://regexr.com?303ne上查看它。
它应该匹配每个,但不包括第三个。
更新:我弄清楚了:
le[\,]{0,}.?m
我正在动态地创建一个正则表达式。
我希望它能匹配以下内容:
lem
le,,m
levm
lecm
基本上,"lem"之前的m可以有任意数量的,
,或者任意一个字符。目前我的文本是:
le[\,]{0,}[.]?m
您可以在http://regexr.com?303ne上查看它。
它应该匹配每个,但不包括第三个。
更新:我弄清楚了:
le[\,]{0,}.?m
Whenever you think "or" in Regular Expressions, you should start with alternation:
a|b
匹配a
或b
中的任意一个。所以
字符列表中的任意数量字符 或者 任意一个字符
可以直接翻译为上述内容。
[...]*|.
...
代表需要匹配的字符列表(一个字符类)。如果你在长表达式中使用它,你需要使用括号,因为串联绑定更强(优先级更高)比交替:
le([,]*|.)m
由于字符类只有一个项,我们可以简化此代码:
le(,*|.)m
请注意,默认情况下,.
代表的是除换行符以外的任何字符。m
是不必要的模式修饰符,因为模式中没有^
或$
锚定符。 - mickmackusale(,*|.?)m
它应该做你想要的事。
m
是不必要的模式修饰符,因为模式中没有^
或$
锚定符。 - mickmackusa([^,])(?=\\1)
但这个做的是相反的 :-) 不确定对你是否可行
更新:
这应该适合你:
~^(?:,|([^,])(?!\\1))+$~
不确定您需要哪种方言,但它在PCRE中有效:http://ideone.com/6Q3Wk
更新2:
相同的正则表达式包含在另一个中。
$r = '(?:,|([^,])(?!\\1))+';
var_dump(preg_match('~le' . $r . 'm~', 'leem'));
le(?:,|([^,])(?!\\1))+m
,其中le
和m
被不作修改地添加到我的周围。leem
应该匹配?你说:“假设中间可以匹配任意数量的逗号或任意字符中的1个”,但“不匹配,因为e只能出现一次”。 - zerkms