鉴于UnicodeString
,s
,包含"Mary\n"
和RegexMatcher
,m
,使用模式"Mary$"
进行编译,如果我这样做的话:
m->reset(s);
bool b = m->find() != 0;
然后b
设置为true
。为什么?该模式表明'y'
的{{1}}应位于字符串的末尾。在这种情况下,它不是字符串的结尾 - "Mary"
是。仅当设置了'\n'
选项时,才应将其设置为true。正确?
这是使用C ++ ICU版本4.8.1。
答案 0 :(得分:3)
这是正常行为:$
匹配字符串或行的末尾(取决于(?m)
或MULTILINE
标志)之前任何尾随换行符。请参阅锚上的this tutorial(向下向下滚动到“以换行符结尾的字符串”)。
使用\z
代替 - 只匹配字符串的最后一部分。