【发布时间】:2012-10-14 18:34:11
【问题描述】:
假设有一个"foo" 或"foo|baz|bar" 形式的序列向量(一个单词或多个单词,由"|" 等特殊字符分隔),我们也给定了一个单词,我们想找到它有一个整个单词匹配的向量的哪些项目。
例如,单词"foo" 在"foo|baz|bar" 中有一个完整匹配,但在"foobaz|bar" 或"bazfoo" 中没有一个完整匹配。
首先我尝试使用"\\b" 来指示整个单词的开始或结束边缘并且它成功地工作:
grep("\\bfoo\\b", "foo") # match
grep("\\bfoo\\b", "foobaz|bar") # mismatch
grep("\\bfoo\\b", "bazfoo") # mismatch
然后我尝试添加"|"作为两端的另一个可能的分隔符,并使用[和]将其与"\\b"分组:
grep("[|\\b]foo[|\\b]", "foo|baz|bar") # mismatch!
grep("[|\\b]foo[|\\b]", "foo") # mismatch!
后来我发现\\b不是字符串的start或end的指示符,而是整个单词的开始或结束(这么多字符,如空格和,|-^. 但不是数字和下划线 _ 分隔整个单词)。所以"[|\\b]foo[|\\b]" 匹配所有这些字符串:"foo", "foo|bar|baz", "foo-bar", "baz foo|bar" 但不匹配"foo_bar" 或"foo2"。
但我的问题仍然存在:为什么 "[|\\b]foo[|\\b]" 模式无法与 "foo" 匹配?
【问题讨论】:
-
我很难选择正确的答案,因为它们中的大多数都非常完美!