1

我编写了一个 Ruby 脚本,该脚本通过 open-uri 检索网页并对其运行正则表达式来定位页面上的圣经经文。当我使用正则表达式运行 Chrome 正则表达式搜索插件时,正如我所期望的那样突出显示这些经文。当我在 Ruby 中运行它时,并不是所有的诗句都被选中。我很确定这个问题与我在使用我scan用来获取所有匹配项时基于正则表达式组获取子匹配项的事实有关。如何确保我获得的唯一匹配项是与正则表达式完全匹配的匹配项?我不关心基于组的子匹配。

例如,“约翰福音 3:16”是重要匹配,而不是其部分“约翰”、“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)
4

1 回答 1

2

尝试非捕获组:

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

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

于 2013-08-11T00:57:03.500 回答