The first note:
/*regular experssion grammars:
ECMAScript最powerful,也是下面用的
basic
extended
awk
grep
egrep
*/
#include<regex>
#include<iostream>
using namespace std;
int main(){//基本查找匹配
string t;
while(1){
cin>>t;
try {// http://www.cplusplus.com/reference/regex/ECMAScript规范的连接地址
// regex e("ab"); //表示只匹配ab
// regex e("ab.",regex_constants::icase);//. 表示后面只能是一个字符,除了空行 ,icase可以忽略大小写
// regex e("abc?"); //?表示最后一个字符,可以有可无
// regex e("abc*");//*表示最后一个字符可有可无,并且后面可以接无数个字符
// regex e("abc+");//+ 表示最后一个字符必须有,并且最后一个字符可以重复出现
// regex e("abc[def]");//[] 表示括号内的字符,只能选一个,并且不能不选
// regex e("abc[def]*");//表示只能“ 匹配abc,然后后一位必须从[]中选或者abc后面直接为0,再后面的字符就不限制
// regex e("abc[^def]*");//正好相反,表示[]内不能匹配
// regex e("abc[abc]{5}");//{} 表示后面有几位字符。这里的意思是abc后面的5位字符必须从[]选
// regex e("abc|yuan[fang]");// | 是或的意思。 这里abc, 或者yuan[fang],
// regex e("abc|yuan[fang\]]");//\]可以用转义字符
// regex e("(abc)de+(yuan)\\1\\2");//()表示一个组,后面\\1,\\2表示第组。 这里匹配上的例子为:abcdee...eeyuanabcyuan
//regex e("[[:w:]]+@[[:w:]]+.com");//匹配邮箱, [[:w:]] 是word character:digital,number,or underscore
//http://www.cplusplus.com/reference/regex/ECMAScript规范的连接地址
//bool match = regex_match(t,e);//这里是匹配整个的字符串
//regex e("ab.",regex_constants::icase);//. 表示后面只能是一个字符,除了空行 ,icase可以忽略大小写
//regex e("^ab.",regex_constants::icase);//^ 这里会搜索,ab是字符串的开头
regex e("ab.$",regex_constants::icase);//$ 这里会搜索,ab是字符串的结尾
bool match = regex_search(t, e); //是匹配子字符串
cout<<(match?"Matched":"Unmatched")<<endl;
}
catch (const std::regex_error& e) {
std::cout << "regex_error caught: " << e.what() << '\n';
if (e.code() == std::regex_constants::error_brack) {
std::cout << "The code was error_brack\n";
}
}
// regex e("abc[abc]{5,}");//{5,} 表示后面后面至少为5位
}
return 1;
}
The second note
#include<regex>
#include<iostream>
using namespace std;
int main(){//提取匹配的值
string t;
while(1){
cin>>t;
smatch m; //typedef std::match_results<string>
try {
regex e("([[:w:]]+)@([[:w:]]+).com");//首先对要提取的字符串分组()
bool match = regex_search(t, m, e); //是匹配子字符串,匹配的值会放到smatch中
cout<<"msize="<<m.size()<<endl;
for(int i=0 ; i < m.size();i++){
cout<<"m["<<i<<"]="<<m[i].str()<<endl;
}
cout<<"m.prefix().str():"<<m.prefix().str()<<endl;//匹配字符前面的字符
cout<<"m.suffix().str():"<<m.suffix().str()<<endl;//匹配字符后面的字符
}
catch (const std::regex_error& e) {
std::cout << "regex_error caught: " << e.what() << '\n';
if (e.code() == std::regex_constants::error_brack) {
std::cout << "The code was error_brack\n";
}
}
}
return 1;
}
这篇博客详细记录了C++中正则表达式的使用和理解,包括基础语法、匹配模式以及在实际编程中的应用实例。
16万+

被折叠的 条评论
为什么被折叠?



