2017-07-06 184 views
-1

我嘗試了幾個其他鏈接,如Regex Match all characters between two stringsRegex get all content between two characters 但它們似乎不符合此用例。正則表達式匹配2個字符之間的所有字符串

我想得到所有的名字,土豆和番茄。例如,從|>

text = "with <@U0D08NR3|potato> and <@U1698M96|tomato> please" 

text.scan((?<=|).*?(?=>))似乎沒有工作,要麼..

請指引我的正則表達式的神。

+0

['<@ [A-Z0-9] {8} \ |(。*?)>'](https://regex101.com/r/X8PQ3P/1) – Tushar

回答

1

你忘了躲避管(|),它現在被解釋爲指示器的交替

您與逃脫管正則表達式:

(?<=\|).*?(?=>) 

Here you can see the result

+0

未找到全部的名字雖然 – Wboy

+1

你是什麼意思?你能舉一個例子,說明什麼是和不匹配? – ScintillatingSpider

+0

對不起,我在regex101.com上測試它,它沒有正確顯示結果!它在Ruby上工作正常:)當計時器啓動時,我會接受你的答案謝謝! :) – Wboy

1

剛剛逃過|(?<=\|).*?(?=>)。沒有它,正回顧後表示匹配任何

0

試試這個:

text.scan(/\|(\w*)\>/).flatten 
# Returns => ["potato", "tomato"] 

不完全確定這是爲什麼這個工程。與貪婪和非貪婪匹配有關。請參閱this

相關問題