C#中正则表达式在replace中的应用
多少年来,许多的编程语言和工具都包含对正则表达式的支持,.NET基础类库中包含有一个名字空间和一系列可以充分发挥规则表达式威力的类,而且它们也都与未来的Perl 5中的规则表达式兼容。 此外,regexp类还能够完成一些其他的功能,例如从右至左的结合模式和表达式的编辑等。 在这篇文章中,我将简要地介绍System.Text.RegularExPRession中的类和方法、一些字符串匹配和替换的例子以及组结构的详细情况,最后,还会介绍一些你可能会用到的常见的表达式。 应该掌握的基础知识 规则表达式的知识可能是不少编程人员“常学常忘”的知识之一。在这篇文章中,我们将假定你已经掌握了规则表达式的用法,尤其是Perl 5中表达式的用法。.NET的regexp类是Perl 5中表达式的一个超集,因此,从理论上说它将作为一个很好的起点。我们还假设你具有了C#的语法和.NET架构的基本知识。 如果你没有规则表达式方面的知识,我建议你从Perl 5的语法着手开始学习。在规则表达式方面的权威书籍是由杰弗里·弗雷德尔编写的《掌握表达式》一书,对于希望深刻理解表达式的读者,我们强烈建议阅读这本书。 RegularExpression组合体 regexp规则类包含在System.Text.RegularExpressions.dll文件中,在对应用软件进行编译时你必须引用这个文件,例如: csc r:System.Text.RegularExpressions.dll foo.cs 命令将创建foo.exe文件,它就引用了System.Text.RegularExpressions文件。 名字空间简介 在名字空间中仅仅包含着6个类和一个定义,它们是: Capture: 包含一次匹配的结果; CaptureCollection: Capture的序列; Group: 一次组记录的结果,由Capture继承而来; Match: 一次表达式的匹配结果,由Group继承而来; MatchCollection: Match的一个序列; MatchEvaluator: 执行替换操作时使用的代理; Regex: 编译后的表达式的实例。 Regex类中还包含一些静态的方法: Escape: 对字符串中的regex中的转义符进行转义; IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值; Match: 返回Match的实例; Matches: 返回一系列的Match的方法; Replace: 用替换字符串替换匹配的表达式; Split: 返回一系列由表达式决定的字符串; Unescape:不对字符串中的转义字符转义。 简单匹配 我们首先从使用Regex、Match类的简单表达式开始学习。 Match m = Regex.Match("abracadabra", "(a|b|r)+"); 我们现在有了一个可以用于测试的Match类的实例,例如:if (m.Success)… 如果想使用匹配的字符串,可以把它转换成一个字符串: Console.WriteLine("Match="+m.ToString()); 这个例子可以得到如下的输出: Match=abra。这就是匹配的字符串了。 字符串的替换 简单字符串的替换非常直观。例如下面的语句: string s = Regex.Replace("abracadabra", "abra", "zzzz"); 它返回字符串zzzzcadzzzz,所有匹配的字符串都被替换成了zzzzz。 现在我们来看一个比较复杂的字符串替换的例子: string s = Regex.Replace(" abra ", @"^\s*(.*?)\s*$", "$1"); 这个语句返回字符串abra,其前导和后缀的空格都去掉了。 上面的模式对于删除任意字符串中的前导和后续空格都非常有用。在C#中,我们还经常使用字母字符串,在一个字母字符串中,编译程序不把字符“ \” 作为转义字符处理。在使用字符“\”指定转义字符时,@"…"是非常有用的。另外值得一提的是$1在字符串替换方面的使用,它表明替换字符串只能包含被替换的字符串。 匹配引擎的细节 现在,我们通过一个组结构来理解一个稍微复杂的例子。看下面的例子: string text = "abracadabra1abracadabra2abracadabra3"; string […]
View Detailsnginx ssl配置
1. 全站ssl 全站做ssl是最常见的一个使用场景,默认端口443,而且一般是单向认证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 443; server_name example.com; root /apps/www; index index.html index.htm; ssl on; ssl_certificate ../SSL/ittest.pem; ssl_certificate_key ../SSL/ittest.key; # ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; # ssl_prefer_server_ciphers on; } |
如果想把http的请求强制转到https的话:
1 2 3 4 5 6 7 8 |
server { listen 80; server_name example.me; rewrite ^ https://$server_name$request_uri? permanent; ### 使用return的效率会更高 # return 301 https://$server_name$request_uri; } |
ssl_certificate证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。 ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。 ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5’(后面是你所指定的套件加密算法) 来看所支持算法。 ssl_prefer_server_ciphers on设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。 https优化参数 ssl_session_cache shared:SSL:10m; : 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。 详细参考serverfault上的问答ssl_session_cache。 ssl_session_timeout : 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。 设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了。 提示:在生成证书请求csr文件时,如果输入了密码,nginx每次启动时都会提示输入这个密码,可以使用私钥来生成解密后的key来代替,效果是一样的,达到免密码重启的效果: HTTPS服务器优化 SSL操作需要消耗CPU资源,所以在多处理器的系统,需要启动多个工作进程,而且数量需要不少于可用CPU的个数。最消耗CPU资源的SSL操作是SSL握手,有两种方法可以将每个客户端的握手操作数量降到最低:第一种是保持客户端长连接,在一个SSL连接发送多个请求,第二种是在并发的连接或者后续的连接中重用SSL会话参数,这样可以避免SSL握手的操作。会话缓存用于保存SSL会话,这些缓存在工作进程间共享,可以使用ssl_session_cache指令进行配置。1M缓存可以存放大约4000个会话。默认的缓存超时是5分钟,可以使用ssl_session_timeout加大它。下面是一个针对4核系统的配置优化的例子,使用10M的共享会话缓存:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
worker_processes 4; http { ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; server { listen 443; server_name www.example.com; keepalive_timeout 70; ssl on; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; |
from:http://blog.csdn.net/mr_raptor/article/details/51854746
View DetailsEclipse下导入外部jar包的3种方式
我们在用Eclipse开发程序的时候,经常要用到第三方jar包。引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间。下面配图说明3种Eclipse引入jar包的方式。 1.最常用的普通操作方式:基本步骤式 右击“项目”→选择Properties,在弹出的对话框左侧列表中选择Java Build Path,如下图所示:选择Add External JARs,就可以逐个(也可以选择多个jar,但是限制在同一个文件夹中)添加第三方引用jar包。 上面这种方式的操作具有通用性,但是每次创建项目,都需要重新引入Jar包,Jar包不具有可重用性。 2.快速版的操作方式:用户Jar包式 右击“项目”→选择Properties,在弹出的对话框左侧列表中选择Java Build Path,弹出如上图所示的对话框,这里选择"Add Library",弹出如下图所示对话框,选择"User Library",然后选择→Next 在出现的对话框中,可以选择已经创建好的用户自定义库,也可以选择User Libraries,弹出的新对话框中选择"New",创建新的用户自定义库。 在待创建用户自定义库中,输入新的自定义库的名字,如下图 然后为新库,添加所需的Jar包 按上述步骤添加好用户自定义库后,以后可以重用这些已定义好的User Library库,为开发节省时间。 3.快速版的操作方式:文件夹导入式 在项目中,创建新的文件夹(eg:ibatis_jar),如下图所示,本示例中创建了ibatis_jar文件夹 ,并将项目开发需要的第三方的jar包拷贝到该文件夹中。 选中需要添加到项目中的jar包,右键选择"Build PathàAdd to Build Path",这样Jar包就成功导入到项目中了。 第三种导入Jar包的方式比第二种更简单,而且重用性更强,当我们不同的机器上查找所需的Jar包时,将这些文件夹直接拷贝就可以。 暂时对Eclipse导入jar包有这些浅显的理解,随着经验的积累,对Eclipse引入jar包各种方式的区别会理解的更深入! FROM:http://blog.csdn.net/mazhaojuan/article/details/21403717
View Details安装集成PHP开发环境出现“计算机中丢失 MSVCR110.dll”问题
今日在安装PHP环境时出现下列问题 于是乎去网站搜索并下载了MSVCR110.dll。解压后,将MSVCR110.dll放在了C:\\windows\SysWOW64(64位系统,32系统放在C:\WINdows\system32)下面,然后window+R(启动运行),输入cmd,在输入regsvr32 msvcr110.dll,以为问题得以解决,然而又出现下列问题 后又"咨询下了百度",问题才得以解决。解决步骤如下: 1.下载Visual C++ Redistrbutable for Visual Studio 2012 Update 4. 地址: http://www.microsoft.com/zh-CN/download/details.aspx?id=30679 ,进入该网页 2.选择语言:中文简体,然后点击下载 3.根据电脑系统(32位,64位)选择适合自己的版本。 4.点击Next,出现新建下载任务,点击下载就OK了。 5.下载完后,运行下载的exe文件。 6.在运行PHP环境就没问题了。 from:http://www.cnblogs.com/-scl/p/4198746.html
View Detailsapache commons
Apache Commons是Apache软件基金会的项目,曾隶属于Jakarta项目。Commons的目的是提供可重用的、开源的Java代码。 Apache Commons项目的由三部分组成: The Commons Proper – 一个可重用的Java组件库。(已经发布过的) The Commons Sandbox – Java组件开发工作区. (正在开发的项目) The Commons Dormant – 当前处于非活动状态的组件库.(刚启动或者已经停止维护的项目) 建立和维护可重用的Java组件。使用组件可以提高开发效率和质量。
View Details现在的互联网是各家“云”集
现在的云服务可是真多啊,百度一下,排名如下: 华为云(广告) 京东云(广告) 腾讯云(广告) 亚马逊AWS(广告) 网易云(广告) 阿里云 金山云 大佬们都做云,中国的互联网+可是如火如荼。
View Details史上最全最强SpringMVC详细示例实战教程
一、SpringMVC基础入门,创建一个HelloWorld程序 1.首先,创建一个“Dynamic Web Project”,输入项目名称:dabeizhou。然后导入jar包。 2.在src下添加springContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 搜索spring控件 --> <context:component-scan base-package="test.dabeizhou"></context:component-scan> <!-- 视图页面配置 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans> |
3.修改web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>dabeizhou</display-name> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app> |
4.在WEB-INF文件夹下创建名为views的文件夹,用来存放jsp视图。 创建一个hello.jsp,在body中添加“Hello World”。 5.建立包及Controller,如下所示 6.编写Controller代码
1 2 3 4 5 6 7 8 9 |
@Controller @RequestMapping("/mvc") public class mvcController { @RequestMapping("/hello") public String hello(){ return "hello"; } } |
7.启动服务器,键入 http://localhost:8080/dabeizhou/mvc/hello 二、配置解析 1.DispatcherServlet DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。 2.InternalResourceViewResolver 视图名称解析器 3.以上出现的注解 @Controller 负责注册一个bean 到spring 上下文中 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求 三、SpringMVC常用注解 @Controller 负责注册一个bean 到spring 上下文中 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求 @RequestBody 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上 @ResponseBody 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区 @ModelAttribute 在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法 在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中 @RequestParam 在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法 @PathVariable 绑定 URL 占位符到入参 @ExceptionHandler 注解到方法上,出现异常时会执行该方法 @ControllerAdvice 使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常 四、自动匹配参数
1 2 3 4 5 6 |
//match automatically @RequestMapping("/person") public String toPerson(String name,double age){ System.out.println(name+" "+age); return "hello"; } |
五、自动装箱 1.编写一个Person实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package test.SpringMVC.model; public class Person { public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } private String name; private int age; } |
2.在Controller里编写方法
1 2 3 4 5 6 |
//boxing automatically @RequestMapping("/person1") public String toPerson(Person p){ System.out.println(p.getName()+" "+p.getAge()); return "hello"; } |
六、使用InitBinder来处理Date类型的参数
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//the parameter was converted in initBinder @RequestMapping("/date") public String date(Date date){ System.out.println(date); return "hello"; } //At the time of initialization,convert the type "String" to type "date" @InitBinder public void initBinder(ServletRequestDataBinder binder){ binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); } |
七、向前台传递参数
1 2 3 4 5 6 7 8 9 |
//pass the parameters to front-end @RequestMapping("/show") public String showPerson(Map<String,Object> map){ Person p =new Person(); map.put("p", p); p.setAge(20); p.setName("jayjay"); return "show"; } |
前台可在Request域中取到"p" […]
View DetailsPHP json_encode() 函数详解及中文乱码问题
在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。 这个函数的功能是将数值转换成json数据存储格式。 1 2 3 4 5 6 7 8 9 <?php $arr = array ( 'Name’=>’希亚', 'Age’=> ); $jsonencode = json_encode($arr); echo $jsonencode; ?> 程序运行结果如下: {"Name":null,"Age":} json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf- 编码,我认为是前端的 Javascript 也是 utf- 的原因。 1 2 3 4 5 6 7 8 <?php $array = array ( 'title’=>iconv('gb',’utf-',’这里是中文标题'), 'body’=>’abcd…' ); echo json_encode($array); ?> 这个程序的运行结果为: {"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd…"} 数组中所有中文在json_encode之后都不见了或者出现\u2353等。 解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 […]
View Detailsphp返回json数据函数实例
本文实例讲述了php返回json数据函数的用法,分享给大家供大家参考。具体方法如下: json_encode()函数用法: ? 1 echo json_encode(array('a’=>’bbbb',’c’=>’ddddd'); 这样就会生成一个标准的json格式的数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <?php //需要执行的SQL语句 //单条 $sql="select id,name from tbl_user where id=1"; //多条数据 //$sql="select id,name from tbl_user"; //调用conn.php文件进行数据库操作 require('Conn.php'); //提示操作成功信息,注意:$result存在于conn.php文件中,被调用出来 if($result) { // $array=mysql_fetch_array($result,MYSQL_ASSOC); /*数据集 $users=array(); $i=0; while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ echo $row['id'].'———--'.$row['name'].'</br>'; $users[$i]=$row; $i++; } echo json_encode(array('dataList’=>$users)); */ /*单条数据*/ $row=mysql_fetch_row($result,MYSQL_ASSOC); echo json_encode(array('jsonObj’=>$row)); } mysql_free_result($result); //释放结果 mysql_close(); //关闭连接 ?> […]
View Details