2012-02-23 29 views
2

我正在動態地製作一個正則表達式。正則表達式或多個/單個字符

我希望它匹配以下:

lem 
le,,m 
levm 
lecm 

基本上,「LEM」,但第m,纔可以有任意數量的,或任何性質的任何一個。現在我有

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

你可以在 http://regexr.com?303ne

看到它應該每個人,但第三個相匹配。

更新:我想通了:

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

您能描述哪些輸入匹配,哪些不匹配? – 2012-02-23 01:46:56

+0

好的,我添加了一些輸入示例。 – LemonPie 2012-02-23 01:50:47

+0

@LemonPie:「LemonPie」呢?這是否匹配?也就是說,爲了使比賽失敗,雙倍角色必須是連續的嗎? – 2012-02-23 01:53:29

回答

4

每當你覺得 「或」 正則表達式,你應該開始交替:

a|b 

比賽無論是ab。所以

任意數量的任何字符

的字符1列表或可以毫不誇張地翻譯成

[...]*|. 

其中...將字符相匹配的列表( 字符類)。如果您使用的是一個較長的表達式的一部分,你需要使用括號,因爲串聯結合更強(具有較高的優先級),比交替:

le([,]*|.)m 

由於字符類只有一個項目,我們可以簡化這個:

le(,*|.)m 

請注意,.默認意味着「任何字符,但換行符」。

+1

只是供參考 - 那回答了這個問題的第一個修改,OP不改變 – zerkms 2012-02-23 02:44:28

+0

@ zerkms根據手機界面,OP上次更新時間爲1小時前。最後一次更新是59分鐘前。 – PointedEars 2012-02-23 03:23:10

+0

所以我應該一直在F5看看OP是否改變了主意?我一直在回答最初的問題,逐一獲取細節(你知道 - 原來的問題和所有其他編輯並未包含所有必要的信息並非我的錯),而且在非常最後我得到了downvote ......完美 – zerkms 2012-02-23 03:28:03

0

這個怎麼樣:

([^,])(?=\\1) 

但這則相反:-)不知道這是對你合適

UPD

這應該爲你工作:

~^(?:,|([^,])(?!\\1))+$~ 

不知道你在找什麼方言,但它在PCRE工作:http://ideone.com/6Q3Wk

UPD2

相同包括正則表達式插入另一個

$r = '(?:,|([^,])(?!\\1))+'; 
var_dump(preg_match('~le' . $r . 'm~', 'leem')); 

在這種情況下最後的表達式變爲:le(?:,|([^,])(?!\\1))+m其中lem圍繞礦山加不加修改

+0

這似乎匹配除了一個, – LemonPie 2012-02-23 01:53:06

+0

@LemonPie每個字符:它做了相反的工作。如果你可以反過來結果 - 那麼它完全適合任務 – zerkms 2012-02-23 01:54:07

+0

我不相信它會爲我的目的工作,因爲我正在做一個褻瀆過濾器。 – LemonPie 2012-02-23 01:55:41

2

這個怎麼樣:

le(,*|.?)m 

它應該做你想要什麼。

+0

'(,*)?'效率低下,使用'le(,* |。?)m'。 – PointedEars 2012-02-23 02:31:23

+0

感謝您的提示,我改了它 – morja 2012-02-23 02:45:31

相關問題