2016-01-17 56 views
-2

我試圖從過去的一篇試卷中找到一些正則表達式,我正在努力理解如何爲它們派生一個表達式。這些都是問題:用重複模式解決正則表達式

Words that contain two or more 3 letter sequence of 
consonants separated by vowels (e.g. uncrinkle, 
thymopsyche, xlyoglyphy, unwrongfully) 

Words that contain 2 or more 2 letter sequences of 
vowels (e.g. visionproof, steamier, preequip) 

我不確定如何接近他們,我最初的嘗試我只是將它們分割使得該模式將匹配在一個很長的正則表達式的字符串,其中我查由元音和分裂三個輔音然後在正則表達式中重複這種模式兩次,但我不認爲這是一個好的解決方案,有更好的,使用組? (我不太明白)

回答

0

用途:

(?:[a-zA-Z]+)?([^aeiou,.\s]{2,3}[a-zA-Z]+)/g 

它將字2首以上的3個輔音匹配。而對於元音,你可以使用:

(?:[a-zA-Z]+)?([aeiou]{2,3}[a-zA-Z]+)/g 

工作原理:

(?:[a-zA-Z]+)?匹配之前選擇寄託都,如果有沒有什麼,它忽略。

[^aeiou,.\s][aeiou]{2,3}捕獲輔音/元音,第一正則表達式忽略,.\s

而在最後[a-zA-Z]+選擇字的其餘部分。

0

(首先,輔音和元音的具體名單取決於你的語言。爲了節省空間,我將使用只爲輔音和AEI BCD ......元音。)

要匹配「包含兩個或更多3個由元音分隔的輔音字母序列的單詞」,則需要匹配三個輔音,然後是元音(或多個元音;該句子對我而言似乎不明確),然後是三個輔音。

[bcd...]{3}[aei...][bcd...]{3} 
[bcd...]{3}[aei...]+[bcd...]{3} 

要匹配「包含元音的2個或更多2字母序列的話」,你需要簡單地搭配2個元音,那麼任何事情,然後2個元音。同樣,如果字符串「aeio」應該被接受,它是不明確的,因爲它具有兩個元音(「ae」和「io」)的兩個序列。該解決方案將是下列之一:

[aei...]{2}[aei...bcd...]*[aei...]{2} 
[aei...]{2}[bcd...]+[aei...]{2} 

如果你應該來檢測在較長的文本完整的單詞,你可以在前面加上每個正則表達式與\b\S*和追加\S*\b,其中\b指字休息和\S*指非空白字符序列。

羣組和後臺引用在這裏沒有幫助,因爲沒有重複。

「或更多」部分表示單個匹配就足夠了;如果它「恰好是兩個」,則需要檢查是否沒有更多這樣的序列,這會使事情複雜化。