假设有一个形式为"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"
?