2015-06-19 72 views
0

我嘗試創建REGEX,以找到可以在一行中出現例如3次的單詞。例如 我有「我的貓在這裏,第二隻貓和第三隻貓在那裏。」正則表達式在同一行上找到相同的單詞repeatead

所以我創建這個正則表達式:

^(\b\w{3,}\b).*\1 

它爲2次出現。但如果加上這個要多於3次:

^(\b\w{3,}\b).*\1{3,} 

它不起作用。 因此,我嘗試查找至少3個字母的任何單詞,並且可以在同一行上至少出現3次。

有人有想法嗎?

感謝

+0

怎麼樣'(\ b \ w {3,} \ b)(?:。*?\ 1){2}'。您可以將「{2}」調整爲您需要匹配的任何事件。 https://regex101.com/r/qP3cS9 – Dolgsthrasir

+0

正是@Dolgsthrasir。這是我想要的。只是一個問題,你能解釋一下這個部分嗎?(?:。*?\ 1)?因爲。*表示所有字符和\ 1第一組。但是什麼?:意思是爲什麼要放置另一個?最後 ?非常感謝你 – baronming

+0

'。*?'中額外的'?'表示非貪婪(或懶惰)。它告訴正則表達式引擎根據需要找到儘可能多的事件,所以它只會查找字符,直到找到下一個匹配'\ 1'。附加的'?:'意味着正則表達式引擎不應該捕獲該組(因爲'。*?\ 1'被放入括號中,引擎會將它作爲一個組來匹配)。你可以在這裏閱讀http://www.regular-expressions.info/tutorialcnt.html – Dolgsthrasir

回答

0

你的正則表達式必須是,

(\b\w{3,}\b).*\1.*\1 

\1{3,}將搜索捕獲字3次或更多次

OR

(\b\w{3,}\b)(?:.*\1){2,} 

.*匹配任何字符,零或更多次。 \1指的是第一個捕獲組內的字符。因此,(?:.*\1){2,}將搜索捕獲的字符串出現兩次以上。如果是,那麼它會做匹配。對於3個或更多,只需將重複量詞內存在的數字2更改爲3. {2,}重複前一個記號(?:.*\1)兩次或更多次。

+0

不幸的是,如果我嘗試你的答案,我的短語:「我的貓在這裏,第二隻貓和第三隻貓在那裏。」沒有出現在答案中。如果我想搜索相同的單詞4或5次,不確定\ 1會重複多次。謝謝 – baronming

+0

那麼它就是'(\ b \ w {3,} \ b)(?:。* \ 1){2,}' –

相關問題