对于C11中的正則表達式的使用
Regular Expression Special Characters
"."---Any single character(a "wildcard")
"["---Begin character class
"]"---End character class
"{"---Begin count
"}"---End count
"("---Begin grouping
")"---End grouping
"\"---Next character has a special meaning
"*"---Zero or more
"+"---One or more
"?"---Optional(zero or one)
"!"---Alternative(or)
"^"---Start of line; negation
"$"---End of line
Example:
case 1:
^A*B+C?
$
explain 1:
以A开头。有多个或者没有B。有至少一个C。之后有没有都能够,结束。
A pattern can be optional or repeated(the default is exactly once) by adding a suffix:
Repetition
{n}---Exactly n times;
{n,}---no less than n times;
{n,m}---at least n times and at most m times;
*---Zero or more , that is , {0,}
+---One or more, that is ,{1,}
?---Optional(zero or one), that is {0,1}
Example:
case 1:
A{3}B{2,4}C*
explain 1:
AAABBC or AAABBB
A suffix ? after any of the repetition notations makes the pattern matcher "lazy" or "non-greedy".
That is , when looking for a pattern, it will look for the shortest match rather than the lonest.
By default, the pattern matcher always looks for the longest match (similar to C++'s Max rule).
Consider:
ababab
The pattern (ab)*matches all of "ababab". However, (ab)*? matches only the first "ab".
The most common character classifications have names:
Character Classes
alnum --- Any alphanumeric character
alpha --- Any alphanumeric character
blank --- Any whitespace character that is not a line separator
cntrl --- Any control character
d --- Any decimal digit
digit --- Any decimal digit
graph --- Any graphical character
lower --- Any lowercase character
print --- Any printable character
punct --- Any punctuation character
s --- Any whitespace character
space --- Any whitespace character
upper --- Any uppercase charater
w --- Any word character(alphnumeric characters plus the underscore)
xdigit --- Any hexadecimal digit character
Several character classes are supported by shorthand notation:
Character Class Abbreviations
\d --- A decimal digit --- [[:digit:]]
\s --- A space (space tab,...) --- [[:space:]]
\w --- A letter(a-z) or digit(0-9) or underscore(_) --- [_[:alnum:]]
\D --- Not \d --- [^[:digit:]]
\S --- Not \s --- [^[:space:]]
\W --- Not \w --- [^_[:alnum:]]
In addition, languages supporting regular expressions often provide:
Nonstandard (but Common) Character Class Abbreviations
\l --- A lowercase character --- [[:lower:]]
\u --- An uppercase character --- [[:upper;]]
\L --- Not \l --- [^[:lower:]]
\U --- Not \u --- [^[:upper:]]
Note the doubling of the backslash to include a backslash in an ordinary string literal.
As usual, backslashes can denote special charaters:
Special Characters
\n --- Newline
\t --- Tab
\\ --- One backslash
\xhh -- Unicode characters expressed using twp hexadecimal digits
\uhhh --- Unicode characters expressed using four hexadecimal digits
To add to the opportunites for confusion, two further logically differents uses of the backslash are provided:
Special Characters
\b --- The first or last character of a word (a "boundary character")
\B --- Not a \b
\i --- The ith sub_match in this pattern
Here are some examples of patterns:
Ax* //A,Ax,Axxxx
Ax+ //Ax,Axxx not A
\d-?
\d //1-2,12 not 1--2
\w{2}-d{4,5} //Ab-1234,XX54321,22-5432
(\d*:)?(\d+) //12:3, 1:23, 123, :123 Not 123:
(bs|BS) //bs ,BS Not bS
[aeiouy] //a,o,u An English vowel, not x
[^aeiouy] //x,k Not an English vowel, not e
[a^eiouy] //a,^,o,u An Engish vowel or ^
以下是測试代码:
#include <iostream>
#include <regex> using namespace std; int main()
{
const char* reg_esp = "^A*B+C? $";
regex rgx(reg_esp);
cmatch match;
const char* target = "AAAAAAAAABBBBBBBBC";
if(regex_search(target,match,rgx))
{
for(size_t a = 0;a < match.size();a++)
cout << string(match[a].first,match[a].second) << endl;
}
else
cout << "No Match Case !" << endl;
return 0;
}
对于C11中的正則表達式的使用的更多相关文章
- hive中使用正則表達式不当导致执行奇慢无比
业务保障部有一个需求,须要用hive实时计算上一小时的数据.比方如今是12点,我须要计算11点的数据,并且必须在1小时之后执行出来.可是他们用hive实现的时候发现就单个map任务执行都超过了1小时, ...
- C++ Tr1中的正則表達式
要使用正則表達式,首先要有类库支持,C++曾经不像Java或者C#有完整的类库使用,可是在Tr1中早已提供了正则库,仅仅是非常少被人们注意罢了 TR1中包括了一个正则库,来自Boost的 regex, ...
- javascript中的正則表達式
对文本数据进行操作是JavaScript中常见的任务.正則表達式通过同意程序猿指定字符串匹配的模式来简化诸如验证表单中输入是否具有正确格式之类的任务. 1.正則表達式标记: 字符 含义 举例 i 大写 ...
- vim中使用正則表達式
一.使用正則表達式的命令 使用正則表達式的命令最常见的就是 / (搜索)命令. 其格式例如以下: /正則表達式 还有一个非常实用的命令就是 :s(替换)命令,将第一个//之间的正則表達式替换成第二个/ ...
- C++11中正則表達式測试
VC++2010已经支持regex了, 能够用来编译下述代码. #include <string> #include <regex> #include <iostream ...
- JAVA中正則表達式总结
昨天,我的朋友请教我正則表達式.我也好久没有写过正則表達式了,昨天刚好看了下如鹏网创始人杨中科老师关于正則表達式的解说.使我加深了正則表達式的印像.现我把他总结下: 很多语言,包含Perl.PHP.P ...
- JAVA中正則表達式总结(具体解释及用途)
很多语言,包含Perl.PHP.Python.JavaScript和JScript,都支持用正則表達式处理文本,一些文本编辑器用正則表達式实现高级"搜索-替换"功能.所以JAVA语 ...
- python使用正則表達式
python中使用正則表達式 1. 匹配字符 正則表達式中的元字符有 . ^ $ * + ? { } [ ] \ | ( ) 匹配字符用的模式有 \d 匹配随意数字 \D 匹配随意非 ...
- python 学习笔记 10 -- 正則表達式
零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...
随机推荐
- Hyper-V笔记
Hyper-V的网络架设 Hyper-V中创建“虚拟网络”(可看成交换机)会在物理机中创建相应的虚拟网卡.Hyper-V安装好后会默认创建一个“本地连接-虚拟网络”对应的虚拟网卡给物理机使用,原本的本 ...
- sed中求公共前缀
string1="test toast" string2="test test" printf "%s\n%s\n" "$stri ...
- ECLIPSE中反编译插件JAD的配置安装,轻松查看JAVA源代码
第一步:下载jad的eclipse插件jar包 http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download 第二步:将此jar ...
- 4pdf
http://www.cnblogs.com/haocool/archive/2013/03/16/2962547.html
- Embedding Lua, in Scala, using Java(转)
LuaJ I was reading over the list of features that CurioDB lacks compared to Redis , that I’d previou ...
- Cocos-2dx-Lua中使用Luaj的完整示例(转)
如何使用Luaj进行java与Lua之间的交互调用 一.主要分为两个大步骤,Lua工程的修改,android工程的修改 二.工程环境 开发工具:Cocos-Code-IDE Lua版本 : Lua 5 ...
- 超人学院Hadoop大数据资源共享
超人学院Hadoop大数据资源共享-----数据结构与算法(java解密版) http://yunpan.cn/cw5avckz8fByJ 訪问password b0f8 很多其它精彩内容请关注: ...
- cocos3——8.实现初学者指南
1.采用ClippingNode裁剪范围 写作物接口: function createClipNode(node, stencil, inverted) { var clip_node = new c ...
- 在深入分析:Android在app之间的相互作用(一个,使用Action)
我们开发Android App时间应用,有些需求,我们需要启动另一App为了应对一些逻辑.例如,我们需要映射基于地址调用系统或相关Map App,所以,我们不自己有App在相应的功能的制备.而是通过I ...
- style.display table-row与block
<tr id="js_rowShow" style=" display:none"> </tr> 问题: display:设置成bloc ...