假设有一个形式为"foo"or的序列向量"foo|baz|bar"(一个单词或多个单词,由特殊字符 like 分隔"|"),并且我们还给定了一个单词,我们想找出它与向量的哪些项目与整个单词匹配。
例如,单词"foo"在 中有一个完整的匹配项,但在or"foo|baz|bar"中没有一个完整的匹配项。"foobaz|bar""bazfoo"
首先,我尝试使用"\\b"它来指示整个单词的开始或结束边缘,并且它成功地工作:
grep("\\bfoo\\b", "foo") # match
grep("\\bfoo\\b", "foobaz|bar") # mismatch
grep("\\bfoo\\b", "bazfoo") # mismatch
然后我尝试添加"|"作为两端的另一个可能的分隔符,并"\\b"使用[and将其分组]:
grep("[|\\b]foo[|\\b]", "foo|baz|bar") # mismatch!
grep("[|\\b]foo[|\\b]", "foo") # mismatch!
后来我发现\\b不是字符串的开头或结尾,|-^.的指示符,而是整个单词的开头或结尾(很多字符,如空格而不是数字和下划线_分隔整个单词)。所以"[|\\b]foo[|\\b]"匹配所有这些字符串:"foo", "foo|bar|baz", "foo-bar", "baz foo|bar"但不匹配"foo_bar"or "foo2"。
但我的问题仍然存在:为什么"[|\\b]foo[|\\b]"模式无法匹配"foo"?