如何获得所有正则表达式匹配而不考虑Ruby中的组?

时间:2013-08-11 00:40:55

标签: ruby regex

我编写了一个Ruby脚本,它通过open-uri检索一个网页,并运行一个正则表达式来查找页面上找到的圣经经文。当我使用Regex运行Chrome Regex Search插件时,这些经文会像我期望的那样突出显示。当我在Ruby中运行它时,并非所有经文都被选中。我非常确定这个问题与我使用scan获取所有匹配时基于正则表达式组的子匹配这一事实有关。我怎样才能确保我得到的唯一匹配是完整匹配正则表达式的匹配?我并不关心基于群组的子匹配。

例如"约翰福音3:16"是一个重要的匹配,而不是它的部分" John"," 3"," 3:16"等由于使用组而产生。

以下是相关代码:

rx = Regex.new("(Genesis|Gen|Ge|Gn|Exodus|Exo|Ex|Exod|Leviticus|Lev|Le|Lv|Numbers|Num|Nu|Nm|Nb|Deuteronomy|Deut|Dt|Joshua|Josh|Jos|Jsh|Judges|Judg|Jdg|Jg|Jdgs|Ruth|Rth|Ru|Ezra|Ezr|Ez|Nehemiah|Neh|Ne|Esther|Esth|Es|Job|Jb|Psalm|Pslm|Ps|Psalms|Psa|Psm|Pss|Proverbs|Prov|Pr|Prv|Ecclesiastes|Eccles|Ec|Song of Solomon|Song|So|Song of Songs|SOS|Isaiah|Isa|Is|Jeremiah|Jer|Je|Jr|Lamentations|Lam|La|Ezekiel|Ezek|Eze|Ezk|Daniel|Dan|Da|Dn|Hosea|Hos|Ho|Joel|Joel|Joe|Jl|Amos|Amo|Am|Obadiah|Obad|Ob|Jonah|Jnh|Jon|Micah|Micah|Mic|Nahum|Nah|Na|Habakkuk|Hab|Zephaniah|Zeph|Zep|Zp|Haggai|Hag|Hg|Zechariah|Zech|Zec|Zc|Malachi|Mal|Ml|Ecclesiastes|Eccl|Ecc|Ec|Jeremiah|Jer|Matthew|Matt|Mt|Mark|Mrk|Mk|Mr|Luke|Luk|Lk|Lu|Acts|Act|Ac|Romans|Rom|Ro|Rm|Galatians|Gal|Ga|Ephesians|Ephes|Eph|Philippians|Phil|Php|Colossians|Col|Titus|Tit|Philemon|Philem|Phm|Phi|Hebrews|Heb|James|Jas|Jm|Ja|Jude|Jud|((1|I|1st|First|2|II|2nd|Second) ?(Samuel|Sam|Sa|Kings|Kgs|Ki|K|Chronicles|Chron|Ch|Corinthians|Cor|Co|Thessalonians|Thess|Thes|Th|Timothy|Tim|Ti|Peter|Pet|Pe|Pt))|(((1|I|1st|First|2|II|2nd|Second|3|III|3rd|Third) ?)?John|Jn|Jhn)).?(,? ?[1-9][0-9]?[0-9]?:[1-9][0-9]?[0-9]?(-[1-9][0-9]?[0-9]?)?)+")
verses  = content.scan(rx)

1 个答案:

答案 0 :(得分:2)

尝试非捕获组:

(?:Genesis|Gen|Ge|...)

它会阻止匹配以匹配子组,但我不能100%确定这是否是一个问题。