2013-10-06 67 views
2

我想匹配具有與第二個字母重複的字母,結尾字符和中間1次的單詞,並且我需要捕獲第二個字母並匹配整個線。匹配具有相同字母的單詞

話例子

syzygy 
error 
banana 

我試圖做

^[a-z]([a-z])[a-z]+[a-z]+\1$ 

與此相匹配的線和捕捉我的第二封信,但我需要確保第二個字母重複

s(y)z y <-same as second character g y <- ends in same character 

所以我需要確定一個字符串y是第二個位置,中間是1,字符串的結尾

+0

你的第一句就完全在我頭上。你能發佈預期的輸出嗎? –

+1

「似乎不對」?爲什麼不先嚐試併發布你獲得的和你想得到的東西? – Jerry

+0

@ user2852075:你如何在這裏定義中間? – anubhava

回答

1

如果我理解正確的話,可以這樣做的一種方法是使用反面預覽

^.(.)(?:(?!\1).)*\1(?:(?!\1).)*\1$ 

.匹配除換行符以外的任何單個字符。通過使用\1,我們引用保存在第一個捕獲組中的匹配。

regular expression explanation參見

參見live demo捕獲第二字符和整個字符串匹配的。

請參閱live demo\1如何匹配重複字符。

+0

這似乎工作!怎麼是(?! – user2852075

+0

這可能是一個問題,如果中間有一個以上的\ 1 – sln

+0

OP用'3'重複字符表示單詞,從第二個位置開始,在中間的某個位置,結束? – hwnd

1
# ^[a-z]([a-z])[a-z]*\1[a-z]*\1$ 

^ 
[a-z] 
([a-z]) # (1), Second letter 
[a-z]* 
\1   # A Backref to second letter in the middle 
[a-z]* 
\1   # A Backref to second letter at the end 
$ 
+0

+1原始問題=) – hwnd

1

你可以使用這個表達式:

^.(.).*?\1.*?\1$ 
+0

這匹配多於一個重複字符在中間 – user2852075

+1

+ 1根據OP的原始問題陳述,這是正確的。 – sln

+0

@ user2852075:在編輯之前您並不清楚您需要恰好3個相同字符的匹配。 – anubhava

相關問題