C#之正则表达式使用实例讲解

C#之正则表达式使用实例讲解
C#之正则表达式使用实例讲解

正则表达式

正则表达式 一、什么是这则表达式 正则表达式(regular expressions)是一种描述字符串集的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于搜索、编辑或者是操作文本和数据。它超出了java程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。一般使用的java.util.regex API所支持的正则表达式语法。 二、测试用具 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex{ public static void main(String[]args)throws Exception{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); if(br==null){ System.out.println("没有输入任何数据"); System.exit(1); } while(true){ System.out.print("输入表达式:"); Pattern pattern=https://www.360docs.net/doc/1714815161.html,pile(br.readLine()); System.out.print("输入字符串:"); Matcher matcher=pattern.matcher(br.readLine()); boolean found=false; while(matcher.find()){ System.out.println("找到子字符串"+matcher.group()+" 开始于索引"+matcher.start()+"结束于索引"+matcher.end()+"\n") found=true; } if(!found){ System.out.println("没有找到子字符串\n"); } } } }

C#利用正则表达式实现字符串搜索

C#利用正则表达式实现字符串搜索 2005-08-04 22:27 作者:张志远来源:天极网 【简介】 本文给出了在C#下利用正则表达式实现字符串搜索功能的方法,通过对.NET框架下的正则表达式的研究及实例分析,总结了正则表达式的元字符、规则、选项等。 加入收藏设为首页 -------------------------------------------------------------------------------- 3、.NET 框架的正则表达式类 下面通过介绍 .NET 框架的正则表达式类,熟悉一下.NET框架下的正则表达式的使用方法。 3.1 Regex 类表示只读正则表达式 Regex 类包含各种静态方法,允许在不显式实例化其他类的对象的情况下使用其他正则表达式类。以下代码示例创建了 Regex 类的实例并在初始化对象时定义一个简单的正则表达式。请注意,使用了附加的反斜杠作为转义字符,它将 \s 匹配字符类中的反斜杠指定为原义字符。 Regex r; // 声明一个 Regex类的变量 r = new Regex("\\s2000"); // 定义表达式 3.2 Match 类表示正则表达式匹配操作的结果 以下示例使用 Regex 类的 Match 方法返回 Match 类型的对象,以便找到输入字符串中第一个匹配。此示例使用 Match 类的 Match.Success 属性来指示是否已找到匹配。 Regex r = new Regex("abc"); // 定义一个Regex对象实例 Match m = r.Match("123abc456"); // 在字符串中匹配 if (m.Success) {

Excel中使用正则表达式

Excel另类条件化格式 1 前言 我们知道,Excel的条件化格式可以根据单元个的内容来设置整个单元格的格式。如图1中的C列,当单元格的内容为“结束”时,字体颜色为绿色,为“进行中”时,颜色为黄色。但如果我们想把B列的部分特定文字(如日期2012-3-4)设置成不同的字体和颜色, Excel的条件化格式工具是不能实现的,需要另辟蹊径。 图1 2 实现过程 2.1 目标 实现B列单元格中日期字符串的字体设置成“Arial Black”字体,颜色为红色。 2.2 设计思路 Excel的VBA编程功能很强大,可以轻松实现上述目标。程序的设计思路是:找到日期字符串,然后设置字体格式。本例中利用了正则表达式来寻找日期字符串,通过Characters对象的Font属性来设置字符串的格式。 2.3 正则表达式 我们在处理文本时,经常会遇到一些满足某种规则的字符串。比如,一个无符号的整数由一连串的数字构成,本例中的日期是满足“整数-整数-整数”规则的字符串。正则表达式就是用来指定这种规则的。如果某个字符串满足正则表达式指定的规则,则称该字符串为正则表达式的一个“匹配串”。正则表达式中用\d 来匹配单个数字,用\d+来匹配连续的多个数字,这样本例中用"\d+-\d+-\d+"就可以匹配日期字符串。Excel的VBA可以通过引用vbscript中的正则标定式对象"vbscript.regexp"来使用正则表达式。 2.4 Characters函数 语法:Characters(start, length) 参数:Start是指从第几个字符处开始选择,length是要返回的字符数。 返回:Characters对象。用来控件文本中某一范围的字符串。例如,通过Characters对象的Font属性可以设置字符串的字体格式。 2.5程序代码 把FormatClick程序和“更新”按钮的Click事件关联起来,只要点击“更新”按钮就可以更新日期的字体的名称和颜色了。具体程序如下: Sub FormatClick() '声明正则表达式对象 Dim RegEx As Object '引用正则标定式对象 Set RegEx = CreateObject("vbscript.regexp")

正则表达式语法完整版

正则表达式基础知识 一个正则表达式就是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

下面看几个例子: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的字符串。 '*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。下面是几个例子: "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。 也可以使用范围,用大括号括起,用以表示重复次数的范围。 "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。 还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。 还有一个'|',表示“或”操作: "hi|hello":表示一个字符串里有"hi"或者"hello"; "(b|cd)ef":表示"bef"或"cdef"; "(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c"; '.'可以替代任何字符: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符); 方括号表示某些字符允许在一个字符串中的某一特定位置出现: "[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b"); "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者"[abcd]");"^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; "[0-9]+":表示一个以上的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。 你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。 为了逐字表达,必须在"^.$()|*+?{\"这些字符前加上转移字符'\'。 请注意在方括号中,不需要转义字符。

VC正则表达式的使用

VC正则表达式的使用 2010年9月11日星期六邵盛松 正则表达式是一种对字符进行模糊匹配的一个公式。在数据有效性验证,查找,替换文本中都可以使用正则表达式。 本篇文章主要描述的是使用ATL中两个模板类CAtlRegExp和CAtlREMatchContext。 在使用CAtlRegExp类之前需要添加#include 这个头文件。 RegExp是Regular Expression的缩写 以匹配邮件地址字符串为例说明两个类的使用 该示例更改自https://www.360docs.net/doc/1714815161.html,/en-us/library/k3zs4axe(VS.80).aspx CString strRegex=L"({[0-9_]+@[a-zA-Z0-9]+[.][a-zA-Z0-9]+[.]?[a-zA-Z0-9]+})"; CString strInput; strInput=L"admin@https://www.360docs.net/doc/1714815161.html,"; CAtlRegExp reRule; wchar_t *wt = (wchar_t *)(LPCTSTR)strRegex; REParseError status = reRule.Parse((const ATL::CAtlRegExp::RECHAR *)wt); if (REPARSE_ERROR_OK != status) { return 0; } CAtlREMatchContext mcRule; wt = (wchar_t *)(LPCTSTR)strInput; if (!reRule.Match((const ATL::CAtlRegExp::RECHAR *)wt,&mcRule)) { AfxMessageBox(L"您输入的邮件地址不合法!"); } else { for (UINT nGroupIndex = 0; nGroupIndex < mcRule.m_uNumGroups; ++nGroupIndex) { const CAtlREMatchContext<>::RECHAR* szStart = 0;

用正则表达式实现排版助手

用正则表达式实现排版助手(GIDOT TYPESETTER)的部分排版功能 2009年08月06日星期四上午 08:42 副标题:用正则表达式实现段首缩进、修正换行、修正非段落换行、删除行尾空格、删除空行 相信使用过排版助手的人应该都觉得这是一个好软件吧?不过,我对其中的“删除非段落换行”有一个不满的地方 [https://www.360docs.net/doc/1714815161.html,/gevolution90/blog/item/34cabb7fc2b8710128388ada. html]。于是才引发出这一篇文章。 *如果你还未有在windows下的正则表达式批量替换工具的话,推荐使用TextForever[https://www.360docs.net/doc/1714815161.html,/stronghorse/software/index.htm#Tex tForever],很强大的文本整理工具 1.段首缩进: 可以把每行(段)的前面格式化成指定的字符串,比如2个全角空格。 正则:^[ ]*(?=[^\s]) 你可以替换成2个全角空格或4个半角空格或你自己喜欢的任何字符串。 2.修正换行: 有些文章一行紧接着一行,看起来有点不舒服,可以把每段内容段(有文字的段)之间的换行格式化成指定数量的换行比如双换行(两段之间空一行空行)。 正则:[\r\n]+ 你可以替换成2个回车。 3.修正非段落换行: 有点文章很变态的,它从文本内容中实现换行,比如: 第一段的内容,内容,内容 第一段第二行的内容内容内容。 这样的换行,这对于资料的整理有点不利,所以,这个正则就是用来修正这样的换行的,把它们合并成一行,即一个段落。 正则:^(。{25,}[^……“”!!::??])\r\n 替换成:$1 把你认为不是段落结束的标点加入到那个中括号中,大括号中的“25”为作

js正则表达式使用

js正则表达式使用 一,概述 1,正则表达式,可以说是任何一种编程语言都提供的机制,它主要是提供了对字符串的处理能力。 2,正则表达式在页面处理中的使用场景: 1)表单验证。验证某些域符合某种规则,例如邮件输入框必须输入的是邮件、联系电话输入框输入的必须是数字等等 2)处理DOM模型。例如通过表达式定位DOM中的一个对象或一系列对象,一个例子就是定位id属性中含有某个特殊字符的div对象。 3)纯编程逻辑。直接用于编程的逻辑之中。 3,说明:本部分所举的正则表达式的代码片断,都是经过测试的,但有一点需要注意,对于换行的字符串的定义,我们在表述时使用的是类似如下的形式: var str=“It?s is a beautiful city”; 这种形式直接写在JS代码中是错误的,那如何获取具有换行的字符串呢?简单的办法:在textarea中输入文本并换行,然后将该值赋给JS变量即可。例如: var str=document.forms[0].mytextarea.value; 二,语法与使用 1,定义正则表达式 1)定义正则表达式有两种形式,一种是普通方式,一种是构造函数方式。 2)普通方式:var reg=/表达式/附加参数 表达式:一个字符串,代表了某种规则,其中可以使用某些特殊字符,来代表特殊的规则,后面会详细说明。 附加参数:用来扩展表达式的含义,目前主要有三个参数: g:代表可以进行全局匹配。 i:代表不区分大小写匹配。 m:代表可以进行多行匹配。 上面三个参数,可以任意组合,代表复合含义,当然也可以不加参数。 例子: var reg=/a*b/; var reg=/abc+f/g; 3)构造函数方式:var reg=new RegExp(“表达式”,”附加参数”); 其中“表达式”与“附加参数”的含义与上面那种定义方式中的含义相同。 例子: var reg=new RegExp(“a*b”); var reg=new RegExp(“abc+f”,”g”); 4)普通方式与构造函数方式的区别 普通方式中的表达式必须是一个常量字符串,而构造函数中的表达式可以是常量字符串,也可以是一个js变量,例如根据用户的输入来作为表达式参数等等: var reg=new RegExp(document.forms[0].exprfiled.value,”g”);

正则表达式在垂直搜索引擎中的应用

作者简介:张斌(1977-),硕士,讲师,研究方向:电子商务专业方向。 收稿日期:2010-05-06 正则表达式在垂直搜索引擎中的应用 张斌 (浙江越秀外国语学院,绍兴312000) 摘要:采用聚焦爬虫可以提高搜索引擎的检索效率,聚焦爬虫经常使用正则表达式来进行有效的信息检索,着重分析了网页检索中常用的正则表达式,为搜索引擎的构建提供帮助。关键词:正则表达式;聚焦爬虫;信息检索中图分类号:TP3 文献标识码:B 文章编码:1672-6251(2010)08-0162-02 Application of Regular Expressions in Vertical Search Engine ZHANG Bin (Zhejiang Yuexiu Foreign Language College,Shaoxing 312000) Abstract:Because focused crawler system can promote the efficiency of search engine and regular expression could used to get quick and efficient search.In this paper,regular expression used in web page index was analyzed for providing useful help for researcher in vertical search engine. Key words:regular expressions;focuses crawler;information retrieval 页面内容提取、分词、自然语言处理是聚焦爬虫的主要工作。在内容提取中采用正则表达可以明显提高效能,已在许多搜索程序中广泛应用。以下列举几个常用的正则表达,并分析其在聚焦爬虫中的应用方法,以供同行参考。 1正则表达式与文档内容提取 正则表达式是一种编程语言中使用的特殊代码模 式,可用其验证、查找、替换与划分文本内容。聚焦爬虫往往通过对主题网页的学习提取主题特征的正则表达式,以指导爬虫过滤与主题不相符的网页文本[4]。正则表达式基本技巧如下: (1)匹配多个字符之一。如匹配拼写错误的fac - tory ,可用:f [ae]ct [ou]ry ; (2)匹配文本行开始与结束。如以c 开始,a 结束,可用:^a.*b$; (3)匹配单词。如找dog ,可用:\bdog\b ; (4)Unicode 字母。如匹配中文,可用:[\u3400- \u4DB5\u4E00-\u9fa5]; (5)分组和捕获。如匹配年月日相同的日期,可用:\b\d\d (\d\d)-\1-\1\b ,其中1表示捕获分组1,即 (\d\d)中的内容,捕获分组可以表示临时存取的区域, 用于引用和替换; (6)重复匹配。完整HTML 文件可用: .*?.*?.*?.*.*?]*>.*>.*?. 其中:*表示一个或多个,?表示0个或一个,^表示否定。 Html 文件也可使用NekoHTML 做标签补偿,用HtmlParser 等解析程序将网页转换成一个个串联的Node ,用正则式过滤脚本、注释等标签,提取表格等结构化信息,实现网页去噪。其中包括为网页建立网站风格树和计算节点重要性来确定噪声元素。 2正则表达式编程 使用C#、Java 等编程语言的步骤如下:①要先要 导入函数库,其中C#用using System.Text.RegularEx - pressions ;Java 用import java.util.regex.*;②创建正则表达式对象,C#用Regex regexObj =new Regex (" regex pattern");Java 用Pattern regex=https://www.360docs.net/doc/1714815161.html,pile ("regex pattern");Matcher regexMatcher =regex.matcher (subjectString);③在网页信息提取中,拆分字符串、逐行查找为常用功能,C#代码如下:string []spli - tArray=Regex.Split (subjectString,"<[^<>]*>>"),其中

PHP 常用正则表达式 正则

PHP 常用正则表达式正则 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:"^\d+$"//非负整数(正整数+ 0) "^[0-9]*[1-9][0-9]*$"//正整数 "^((-\d+)|(0+))$"//非正整数(负整数+ 0) "^-[0-9]*[1-9][0-9]*$"//负整数 "^-?\d+$"//整数 "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 "^(-?\d+)(\.\d+)?$"//浮点数 "^[A-Za-z]+$"//由26个英文字母组成的字符串 "^[A-Z]+$"//由26个英文字母的大写组成的字符串 "^[a-z]+$"//由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 元字符及其在正则表达式上下文中的行为: \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转

正则表达式

要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。 字符描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,“z o+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“d o”。?等价于{0,1}。 {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“fo o o ood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。 {n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o?”将匹配单个“o”,而“o+”将匹配所有“o”。 点匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[\s\S]”的模式。

正则表达式及小例子

字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现 这些目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理,如匹配,搜索,提取 和分析结构化内容. java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher. Pattern是一个正则表达式经编译后的表现模式。在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特 定的String那样简单,也可以很复杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也 适用于国际化的应用程序. Pattern类的方法简述 方法说明 static Pettern compile(String regex,int flag)编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE表示 不区分大小写) Matcher match(CharSequence input)获取匹配器,input时输入的待处理的字符串 static boolean matches(String regex,CharSequence input)快速的匹配调用,直接根据输入的模式regex匹配input String[]split(CharSequence input,int limit)分隔字符串input,limit参数可以限制分隔的次数 Matcher一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与 PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。 Matcher类的方法简述 方法说明 boolean matches()对整个输入字符串进行模式匹配. boolean lookingAt()从输入字符串的开始处进行模式匹配 boolean find(int start)从start处开始匹配模式 int groupCount()返回匹配后的分组数目 String replaceAll(String replacement)用给定的replacement全部替代匹配

正则表达式

正则表达式
目录
1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在 C 语言中使用正则表达式
1. 引言
以前我们用 grep 在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义. 其实 grep 还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合 xxxxx@xxxx.xxx 模式的字符串(也就是 email 地址),要求 x 字符可以是字母,数字,下划 线,小数点或减号,email 地址的每一部分可以有一个或多个 x 字符,例如 abc.d@https://www.360docs.net/doc/1714815161.html,, 1_2@987-6.54,当然符合这个模式的不全是合法的 email 地址,但至少可以做一次初步筛选, 筛掉 a.b,c@d 等肯定不是 email 地址的字符串.再比如,找出所有符合 yyy.yyy.yyy.yyy 模 式的字符串(也就是 IP 地址),要求 y 是 0-9 的数字,IP 地址的每一部分可以有 1-3 个 y 字 符. 如果要用 grep 查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串 呢?从这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息: 字符类(Character Class):如上例的 x 和 y,它们在模式中表示一个字符,但是取 值范围是一类字符中的任意一个. 数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个 x 字符,IP 地址 的每一部分可以有 1-3 个 y 字符 各种字符类以及普通字符之间的位置关系:例如邮件地址分三部分,用普通字符@和. 隔开,IP 地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述.为 了表示位置关系,还有位置限定符(Anchor)的概念,将在下面介绍.
规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一 起表示一个模式,这就是正则表达式(Regular Expression).例如 email 地址的正则表达式 可以写成[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+,IP 地址的正则表达式可以 写成[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.下一节介绍正则表达式的语法, 我们先看看正则表达式在 grep 中怎么用.例如有这样一个文本文件 testfile:
192.168.1.1
第 1 页 共 10 页

JAVA中正则表达式使用介绍

JAVA中正则表达式使用介绍 一、什么是正则表达式 正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。 正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,进行信息的验证。 此外,它还能够高效地创建、比较和修改字符串,以及迅速地分析大量文本和数据以搜索、移除和替换文本。 例如: 二、基础知识 1.1开始、结束符号(它们同时也属于定位符) 我们先从简单的开始。假设你要写一个正则表达式规则,你会用到^和$符号,他们分别是行首符、行尾符。 例如:/^\d+[0-9]?\d+$/ 1.2句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符: 1.3方括号符号 为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符: 1.4“或”符号

C语言使用正则表达式(常规方法)

C语言使用正则表达式 据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用。C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用regex.h提供的库。我先贴一段代码展示一下RE在C语言里是怎么用的 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 int main(){ 8 9 char*bematch ="hhhericchd@https://www.360docs.net/doc/1714815161.html,"; 10 char*pattern ="h{3,10}(.*)@.{5}.(.*)"; 11 char errbuf[1024]; 12 char match[100]; 13 regex_t reg; 14 int err,nm =10; 15 regmatch_t pmatch[nm]; 16 17 if((err=regcomp(®,pattern,REG_EXTENDED))<0){ 18 regerror(err,®,errbuf,sizeof(errbuf)); 19 printf("err:%s\n",errbuf); 20 }

Python正则表达式实现原理_光环大数据Python培训

https://www.360docs.net/doc/1714815161.html, Python正则表达式实现原理_光环大数据Python培训 正则表达式便于我们理解使用,但是如何让计算机识别用正则表达式描述的语言呢?仍然以前面的[a|b]*abb为例,计算机如何识别[a|b]*abb的意义呢?首先我们来看判断输入内容是否匹配正则表达式的流程图: 图中一共有4个状态S0, S1, S2, S3,在每个状态基础上输入字符a或者b 就会进入下一个状态。如果经过一系列输入,最终如果能达到状态S3,则输入内容一定满足正则表达式[a|b]*abb。 为了更清晰表述问题,将上图转换为状态转换表,第一列为当前状态,第二列为输入a后当前状态的跳转,第三列为输入b后当前状态的跳转。其中S0为起始状态,S3为接受状态,从起始状态起经过一系列输入到达接受状态,那么输入内容即满足[a|b]*abb。 状态abS0S1S0S1S1S2S2S1S3S3S1S0 其实上图就是一个DFA实例(确定有限自动机),下面给出DFA较为严格的定义。一个确定的有穷自动机(DFA) M 是一个五元组:M = (K, ∑, f, S, Z),其中: K是一个有穷集,它的每个元素称为一个状态; ∑是一个有穷字母表,它的每个元素称为一个输入符号,所以也称∑为输入符号表; f是转换函数,是在K×∑→K上的映射,如f(ki, a)→kj,ki∈K,kj ∈K就意味着当前状态为ki,输入符号为a时,将转换为下一个状态kj,我们将kj称作ki的一个后继状态; S∈K是唯一的一个初态;

https://www.360docs.net/doc/1714815161.html, Z?K是一个状态集,为可接受状态或者结束状态。 DFA的确定性表现在转换函数f:K×∑→K是一个单值函数,也就是说对任 何状态ki∈K和输入符号a∈∑,f(k, a)唯一地确定了下一个状态,因此DFA 很容易用程序来模拟。 下面用字典实现[a|b]*abb的确定有限自动机,然后判断输入字符串是否满 足正则表达式。 123456789101112131415161718192021222324252627282930DFA_func = {0: {“a”: 1, “b”: 0}, 1: {“a”: 1, “b”: 2}, 2: {“a”: 1, “b”: 3}, 3: {“a”: 1, “b”: 0} }input_symbol = [“a”, “b”]current_state = 0accept_state = 3strings = [“ababaaabb”, “ababcaabb”, “abbab”]for string in strings: for char in string: if char not in input_symbol: break else: current_state = DFA_func[current_state][char] if current_state == 3: print string, “—> Match!” else: print string, “—>No match!” current_state = 0 “”“outputs: ababaaabb —> Match! ababcaabb —>No match! abbab —>No match! ““” 上面的例子可以看出DFA识别语言简单直接,便于用程序实现,但是DFA较 难从正则表达式直接转换。如果我们能找到一种表达方式,用以连接正则表达式 和DFA,那么就可以让计算机识别正则表达式了。事实上,确实有这么一种表达 方式,可以作为正则表达式和DFA的桥梁,而且很类似DFA,那就是非确定有限 自动机(NFA)。 还是上面的例子,如果用NFA表示流程图,就如下图所示:

利用正则表达式进行查找

利用正则表达式进行查找 Js中利用正则表达式进行查找 一、String对象支持四种利用正则表达式的方法,分别为search(),replace(),match(),split() 1、search()方法以正则表达式作为参数,返回第一个与之匹配的子串开始的位置,如果没有任何与之匹配的子串,它返回-1。 2、replace()方法执行检索和替换操作,它的第一个参数是正则表达式,第二个参数是要进行替换的字符串或者闭包。 3、match()方法的唯一一个参数是正则表达式,它的行为取决于这个正则表达式的标志,如果正则表达式包含了标志g,它的返回值就是包含了出现在字符串中匹配的数组。如果该正则表达式不包含标志g,它也返回一个数组,它的第一个元素是匹配的字符串,余下的元素则是正则表达式中的各个分组。 4、split()方法是能够支持模式匹配的。 二、RegExp对象定义了两个用于模式匹配的方法,它们是exec()和test() 1、RegExp的exec()方法和String的match()方法很类似,它对一个指定的字符串执行一个正则表达式匹配,如果没有找到任何一个匹配,它将返回null,否则返回一个数组,这个数组的第一个元素包含的是与正则表达式相匹配的字符串,余下的所有元素包含的是匹配的各个分组。而且,正则表达式对象的index属性还包含了匹配发生的字符串的位置,属性input 引用的则是被检索的字符串。 如果正则表达式具有g标志,它将把该对象的lastIndex属性设置到紧接着匹配字符串的位置开始检索,如果exec()没有发现任何匹配,它将把lastIndex属性重置为0,这一特殊的行为可以使你可以反复调用exec()遍历一个字符串中所有的正则表达式匹配。 2、RegExp对象的test()参数为一个字符串,如果这个字符串包含正则表达式的一个匹配,它就返回true,否则返回false 当一个具有g标志的正则表达式调用test()方法时,它的行为和exec()相同,既它从lastIndex 处开始检索特定的字符串,如果它发现匹配,就将lastIndex设置为紧接在那个匹配之后的字符的位置,这样我们就可以使用方法test()来遍历字符串了。 PS:以上内容摘自月影的《JavsScript王者归来》,一本不错的书。

c# 正则表达式的使用

?详解C#正则表达式语法的相关规则 ?https://www.360docs.net/doc/1714815161.html, 2009-08-14 16:50 白玉龙呤新浪博客我要评论(1) 介绍一下C#正则表达式语法的相关规则,包括字符的规则、字母文本的规则等等。希望本文能对大家了解C#正则表达式语法有所帮助。 正则表达式通常包含字母文本(Literaltext)和元字符(metacharacter) 字母文本指的是普通文本如"abcde"可匹配字符串中任何包含"abcde"的字符串。 元字符则更加灵活运用通用的表达式匹配所有符合此表达式规律的字符串。 C#正则表达式语法一、匹配单个字符 []——从中选择一个字符匹配 中间支持的类型:单词字符([ae])、非单词字符([!?,;@#$*])、字母范围([A-Z])、数字范围([0]) eg.正则表达式可匹配字符串 [ae]ffectaffect,effect (此例中"[ae]"为元字符,"ffect"为字母文本) 注意:1.要在字符类中匹配连字符,那么把连字符号作为第一个字符列出即可。 2.可以在单个正则表达式中包含多个字符类。 eg.[01][0-9]:[0-5][0-9][ap]m可以用来匹配如12:59pm格式的所有时间 ^——排除某些字符(在[]中表此意,还可表示字符串的开头) eg.正则表达式可匹配字符串不可匹配字符串 m[^a]tmet,mit,m&t……mat C#正则表达式语法二、匹配特殊字符 可以使用的特殊字符: \t——匹配制表符 \r——匹配硬回车符 \f——匹配换页符 \n——匹配换行符

描述表示字符类的元字符: .——匹配任何除了\n以外的字符(或者在单行模式中的任何字符) \w——匹配任何单词字符(任何字母或数字) \W——匹配任何非单词字符(除了字母和数字以外的任何字符) \s——匹配任何空白字符(包括空格、换行、制表符等) \S——匹配任何非空白字符(除了空格、换行、制表符等的任何字符) \d——匹配任何数字字符(0~9的数字) \D——匹配任何非数字字符(除了0~9以外的任何字符) 表示字符串中字符位置: ^——匹配字符串的开头(或者多行模式下行的开头)。 $——匹配字符串的结尾,或者是字符串结尾“\n”之前的最后一个字符,或者是多行模式中的行结尾。 \A——匹配字符串的开头(忽略多行模式) \Z——匹配字符串的结尾或字符串结尾“\n”之前的最后一个字符(忽略多行模式)。 \z——匹配字符串的结尾。 \G——匹配当前搜索开始的位置。 \b——匹配单词的边界。 \B——匹配单词的非边界。 注意: 1.句点字符(.)特别有用。可以用它来表示任何一个字符。 eg.正则表达式可匹配字符串 01.17.8401/17/84,01-17-84,011784,01.17.84 2.可以使用\b匹配单词的边界 eg.正则表达式可匹配字符串不可匹配字符串 \blet\bletletter,hamlet 3.\A和\z在确保字符串所包含的是某个表达式,而不是其他内容时很用。

相关文档
最新文档