为什么当我匹配新行时,我似乎无法识别单个单词。例如:
content = "COAL_STORIES
AUSTRALIA - blah blah blah
BOTSWANA – blah blah blah
URANIUM_STORIES
AUSTRALIA – blah
INDIA - blah
COPPER_STORIES
AUSTRALIA - blah blah blah
AUSTRALIA - blah blah blah
CHINA - blah blah blah
ALUMINIUM_STORIES"
sections = content.scan(/\w.*_.*\b/)
Give和array:
[
[0] "COAL_STORIES",
[1] "URANIUM_STORIES",
[2] "COPPER_STORIES",
[3] "ALUMINIUM_STORIES"
]
但如果我尝试使用'm'标志,一切都会匹配:
sections = content.scan(/\w.*_.*\b/m)
给出一个数组:
[
[0] "COAL_STORIES\nAUSTRALIA - blah blah blah\nBOTSWANA – blah blah blah \n\nURANIUM_STORIES \nAUSTRALIA – blah\nINDIA - blah\n\nCOPPER_STORIES\nAUSTRALIA - blah blah blah\nAUSTRALIA - blah blah blah\nCHINA - blah blah blah\n\nALUMINIUM_STORIES"
]
据我所知,我仍然在寻找相同的单词边界?
答案 0 :(得分:2)
详细说明卡西米尔的评论:
.*
贪婪...它会匹配尽可能长的字符串,包括新行(如果你允许的话)(你可以/通过启用与\m
的多行匹配来完成)。
在您的第一个示例中,.*
与新换行不匹配,因此\b
被强制匹配与\w
匹配的同一行上的字边界。
在第二个示例中,.*
会匹配不同的行,因此当\w
与您的第一个字符匹配时,\b
可以自由匹配任何字边界,甚至可以在很多行之外匹配,只要在两者之间的某处有一个_
。具体来说,对你来说,它看起来像:
\w
匹配您输入中的第一个字符:" C"来自" COAL_STORIES" .*
将所有内容与" ALUMINUM"匹配在最后一行_
匹配" _" .*
匹配" STORIES" \b
与" STORIES"