给定 UnicodeString
,s
,包含 "Mary\n"
和 RegexMatcher
, m
,使用模式“Mary$”
编译,如果我这样做:
m->reset(s);
bool b = m->find() != 0;
然后b
被设置为true
。为什么?该模式表示 "Mary"
的 'y'
应位于字符串的末尾。在本例中,它不是字符串的结尾,而是 '\n'
。仅当设置了 UREGEX_MULTILINE
选项时,才应将其设置为 true。对吗?
这里使用的是 C++ ICU 版本 4.8.1。
最佳答案
这是正常行为:$
匹配字符串或行的末尾(取决于 (?m)
或 MULTILINE
标志) 在任何尾随换行符之前。请参阅this tutorial在 anchor 上(向下滚动大约一半到“以换行符结尾的字符串”)。
使用 \z
代替 - 只匹配字符串的最末尾。
关于regex - ICU 中的 $ 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12566811/