C#正则表达式积累

感谢:侧身向南边   http://www.cnblogs.com/kissknife/archive/2008/03/23/1118423.html
的分享给了自己学习的机会 

 

-------------------------------------C#的正则表达式-------------------------------------------

@的作用:
string x="D:\\My Huang\\My Doc";
string y = @"D:\My Huang\My Doc";
这两句作用相等
C#中想用的类和方法:
string str = "1";
Regex r1 = new Regex(@"\d");--里面放的是正则格式,如果是一串间的字符,那就原样匹配
bool result = r1.IsMatch(str);
返回的是true
IsMatch()只要有合适的就返回true,只能做大概的判断
纯记忆部分
\d  0-9的数字--(目前还不明白1.5所不算)用IsMatch()肯定测不出来,因为既有1又有5.
\D  \d的补集
\w  单词字符,指大小写字母、0-9的数字、下划线
\W  \w的补集
\s  空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f
\S  \s的补集
.  除换行符\n外的任意字符
[…] 里面的格式作为一个整体,匹配的是一个字符,比如[abc]匹配a,匹配b也匹配c
[^…]  匹配非[]内所列出的字符
拆分操作:
string pattern = "[#$]"; //也可以写成string pattern = "#|$"; 
String input="11$8$8#99";
string[] rs = Regex.Split(input, pattern);
数组是 11 8 8 99
注意:如果想要匹配. $ * ^ ) ( [ ] 等等字符串需要转义,例如"\$" 但是这样就不用\转义了[$]
string i = "hello,world";
Regex result = new Regex("hello,world");//true
result.IsMatch(i)
这两句值得揣摩
Regex result = new Regex("^hello,world$");//true
Regex result = new Regex("hello,worl");//false
Regex result = new Regex("^hello,worl$");//false
Regex result = new Regex("^hello,worl");//true
常用的方法
string i = "hellohello";
Regex result = new Regex("hello");
result.Matches.Count(i);//2
纯粹记忆部分:
与次数相关的
{n}     匹配前面的字符n次
{n,}    n次或多于n次
{n,m}   n到m次
?       匹配前面的字符0或1次
+       1次或多于1次
*       0次或式于0次
定位的字符
^  表示其后的字符必须位于字符串的开始处
$  表示其前面的字符必须位于字符串的结束处
\b  匹配一个单词的边界     注意:所谓的边界不光是空格还有, . - # $ % 等等不是单词中元素的都视为边界。(2,d,_)都不是边界
\B  匹配一个非单词的边界
String str ="hello,everybody,happy everyday";
Regex r = new Regex(@"^hello,([a-z]{5})body,happy \1day$");
([a-z]{5})为一组,后面的\1就算是指的它
 r.Match(str).Groups[1].Value
 得到"every"
String str = "zhangranzhang";
Regex r = new Regex(@"^(?<a>[a-z]{5})ran\1$");//给组定义一个名字
Console.WriteLine(r.Matches(str).Count);
Console.WriteLine(r.Match(str).Groups[1].Value);//通过索引取值
Console.WriteLine(r.Match(str).Groups["a"].Value);//通过键取值
String str = "zhangzhang ran";
Regex r = new Regex(@"([a-z]{5})\1");
Console.WriteLine(r.Replace(str,"$1"));
取代重复,字段 输出zhang ran
Regex r = new Regex(@"(?:[a-z]{5})");
?:表示非捕获组,这时引擎不会将改组保存起来,在用不到组是这样做节省资源
贪婪与非贪婪:默认情况,引擎是贪心的,但是在* + 等表示字数的符号后面加?就改为费贪心的了
String myStr = "everyboy is good boy";
Regex res = new Regex(@".*boy");
Console.WriteLine(res.Match(myStr).Value);//输出everyboy is good boy
非贪婪
Regex res = new Regex(@".*?boy");
Console.WriteLine(res.Match(myStr).Value);//输出everyboy
贪婪与回溯
正则表达式是用回溯的方法来实现贪婪匹配的
String myStr = "everyboy, is good boy";
Regex res = new Regex(@".*boy,");
在上面的表达式中,引擎先扫描整个字符串,当前三个字符boy匹配完其实是移动到末尾匹配到了最后一个boy
但是在匹配,的时候出现问题,只能回溯到最近的一个boy再去匹配,所以输出的内容是
everyboy, 
(?>…)这是用来定义非回溯正则的
Regex res = new Regex(@"(?>.*)boy,");
这样就是非回溯的,这样一来,就无法匹配了,IsMatch()返回false
正向预搜索与反向预搜索
正向预搜索包括:正声明(?=),负声明(?!)
String str = "i love the cute nation the big world";
Regex r = new Regex(@".{3,4}\b(?=world)");   换成(?!world)就是指后面不是world
匹配后面跟着一个world的字符串
反向预搜索
正声明(?<=),负声明(?<!)

转载于:https://www.cnblogs.com/zhangran/archive/2012/03/11/2390521.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用业务时间提升自我

转载于:https://www.cnblogs.com/helloIT/articles/5140273.html

[react] react兄弟组件如何通信?

[react] react兄弟组件如何通信&#xff1f; 状态提升&#xff0c;通过父组件的state和方法传递到两个子组件 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

'800a0005' 图片上传出现写入文件失败的错误 -- 修改pload_5xsoft.inc

一、基本问题 一般是文件写入的路径不对&#xff0c;或者是目录的权限没有设置好&#xff08;必须对everyone或者来宾用户IIS_IUSRS设置为完全访问&#xff09; 二、特殊问题 1、错误提示&#xff1a; ADODB.Stream 错误 800a0bbc 写入文件失败。 /code/zhaosheng1/ADMIN/uplo…

AutoMapper用法一瞥

前段时候做个小项目用到了autoMapper&#xff08;参考了NOP里的用法&#xff09;&#xff0c;感觉还行&#xff0c;用起来挺方便的。首先复杂的东西我就不说了&#xff0c;至于详细的教程我也就不写了&#xff0c;比较园子里有很多这样的文章&#xff0c;我就分享下&#xff0c…

ping得通外网,上得了QQ,游戏,却打不开网页。

操作系统&#xff1a;win7_64bit 下午帮我小艾优化电脑&#xff0c;不知道把什么插件给卸载了。 她回来以上就上不了网&#xff0c;我首先ping网关&#xff0c;DNS&#xff0c;外网&#xff0c;都通。 登QQ正常。 我的思路&#xff1a; 先把Socket套字结相关的卸载掉就是&#…

WebGIS中一种根据网格索引判断点面关系的方法

文章版权由作者李晓晖和博客园共有&#xff0c;若转载请于明显处标明出处&#xff1a;http://www.cnblogs.com/naaoveGIS/。 1.背景 判断点面关系的算法有很多&#xff0c;在我之前的博文中有一篇专门对其进行了描述&#xff1a;判断点是否落在面中的Oracle存储过程描述。其中提…

[react] 怎样在react中创建一个事件?

[react] 怎样在react中创建一个事件&#xff1f; var EventEmitter require(events).EventEmitter; class App extends Component{ constructor(props){ super(props); } componentDidMount(){ this.itemChange emitter.addListener(ItemChange, (msg,data)>console.log(…

重写Checkbox 改写选择框的大小

/* 作者&#xff1a;Starts_2000* 日期&#xff1a;2009-07-30* 网站&#xff1a;http://www.csharpwin.com CS 程序员之窗。* 你可以免费使用或修改以下代码&#xff0c;但请保留版权信息。* 具体请查看 CS程序员之窗开源协议&#xff08;http://www.csharpwin.com/csol.html&…

HDU4349--Xiao Ming's Hope(数论)

输入一个n(1<n<108)&#xff0c;求C(n,0),C(n,1),C(n,2)...C(n,n)有多少个奇数。 Lacus定理 http://blog.csdn.net/acm_cxlove/article/details/7844973 A、B是非负整数&#xff0c;p是质数。AB写成p进制&#xff1a;Aa[n]a[n-1]...a[0]&#xff0c;Bb[n]b[n-1]...b[0]。…

[react] react中可以在render访问refs吗?为什么?

[react] react中可以在render访问refs吗&#xff1f;为什么&#xff1f; <><span id"name" ref{this.spanRef}>{this.state.title}</span><span >{this.spanRef.current ? 有值 : 无值}</span></> 不可以&#xff0c;render …

JS splice()方法

splice() 方法用于插入、删除或替换数组的元素。 语法 arrayObject.splice(index,howmany,element1,.....,elementX) 参数 描述 index 必需。规定从何处添加/删除元素。 该参数是开始插入和&#xff08;或&#xff09;删除的数组元素的下标&#xff0c;必须是数字。 howmany…

为什么每天感觉没精神

有些朋友会总是感觉没有精神&#xff0c;整天困得睁不开眼&#xff0c;干什么都没有劲儿&#xff0c;休息又睡不好&#xff0c;该怎么办呢&#xff1f;早睡早起。虽然都是每天睡8小时&#xff0c;但是早睡早起的人明显比晚睡晚起的人充满了正能量。要相信大自然的力量&#xff…

[react-router] React-Router怎么获取历史对象?

[react-router] React-Router怎么获取历史对象&#xff1f; 1.如果React > 16.8 时可以使用 React Router中提供的Hooksimport { useHistory } from "react-router-dom";let history useHistory(); 2.使用this.props.history获取历史对象let history this.pr…

为Ubuntu Server 安装图形桌面环境

From: http://www.oschina.net/question/12_10835 第一步&#xff1a;安装桌面环境 首先需要确保您已经在/etc/apt/sources.list 文件中启用了Universe和Multiverse软件库&#xff0c;接下来执行如下命令&#xff1a; sudo apt-get update sudo apt-get install ubuntu-desk…

使用STM32的USB模块中后对USB缓冲区的认识

最近在使用STM32的USB模块开发个项目&#xff0c;还以为挺简单&#xff0c;结果搞了快两天才把USB的包缓冲区的访问搞定&#xff0c;在此做个小总结吧。 STM32的USB模块包缓冲区有512B&#xff0c;但是在STM32的参考手册中的存储器映像中却表明0x40006000-0x400063ff&#xff0…

md /mdd /ml /mt/mtd

From: http://www.cnblogs.com/eddyshn/archive/2009/11/23/1608823.html VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) C 运行时库 库文件 Single thread(static link) ML libc.lib Debug single …

[react] 在react中怎样改变组件状态,以及状态改变的过程是什么?

[react] 在react中怎样改变组件状态&#xff0c;以及状态改变的过程是什么&#xff1f; 使用this.setState改变组件的状态改变的过程中&#xff0c;React Fiber Reconciler遍历了整个Fiber Tree&#xff0c;得到了最新的DOM diff结果&#xff0c;并把这个结果应用到真实的DOM上…

web前端实战系列[1]——三列布局

1.代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Cont…

[react] react是什么?它的主要特点是什么?

[react] react是什么&#xff1f;它的主要特点是什么&#xff1f; React是用于构建用户界面的库。 特点&#xff1a; 组件化,增强复用性数据到视图的单向绑定,更安全数据的单项传递流高性能个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff…