为什么注释的正则表达式不像未注释的正则表达式一样?我以为"^"也表示行开始。不是吗?
#include <iostream>
#include <regex>
int main()
{
std::string str ("this subject has a submarine as a subsequence");
std::regex re ("\b(sub)([^ ]*)");
// std::regex re ("^(sub)([^ ]*)");
// std::regex re ("(^sub)([^ ]*)");
std::cout << "entire matches:";
std::regex_token_iterator<std::string::iterator> rend;
std::regex_token_iterator<std::string::iterator> a ( str.begin(), str.end(), re );
while (a!=rend) std::cout << " [" << *a++ << "]";
std::cout << std::endl;
return 0;
}
一切正常。它不能匹配任何东西,因为你的行不是以字母"sub,"它以字母" the ">
开头解释这些正则表达式:
\b(sub)([^ ]*)
newword,以sub开头,后跟一些非空格字符。两个捕获组,一个用于"子"。还有一个给其他角色。
^(sub)([^ ]*)
newline,以sub开头,后跟一些非空格字符。两个捕获组,一个用于"子"。还有一个给其他角色。
(^sub)([^ ]*)
(编辑和上面一样,但是锚是捕获组的一部分。
这两行尝试匹配以sub
开头的行,后面跟着0个或多个非空格,例如字符串sub bub
:
sub
std::regex re ("^(sub)([^ ]*)");
std::regex re ("(^sub)([^ ]*)");
在该上下文中,^
锚使得它只匹配一行的开头。
括号中的^
表示不,在所有其他地方表示行开始(除了转义^)
你的未注释模式:b(sub)([^ ]*)
解释:
b
它代表边界,表示w
和W
中的一个字符之间的空格
注意:w
表示0-9之间的所有数字,a-z和a-z之间的所有字符以及下划线字符,W
表示除了w之外的所有内容,因此空格属于w
(sub)
it match "sub"字符串([^ ]*)
表示除空格外的所有内容(更一般的是,当在括号中使用^时,它表示不是所以它表示除空格外的所有内容因为^前面使用了一个空格)