寻找精通正则表达式(regexp)在matlab中应用的大侠
正则表达式对象<br>对象,它包含正则表达式模式,并说明如何应用模式的标志。
<br><br>语法<br>RE=/模式/[标志]<br><br>语法2<br>RE=新的RegExp(“图案”,“标志”;])<br><br>参数<br>重新<br><br>要求。
将被分配到的正则表达式模式的变量名称。
<br><br>模式<br><br>要求。
要使用正则表达式模式。
如果使用语法1,用一个“/”字符模式。
如果语法2,引号引起的模式。
<br><br>标志<br><br>选项。
如果您使用的语法使用引号标志将导致。
该标志可以组合使用,可用:<br><br>克(全文查找出现的所有pattern)<br>i(忽略大小写)<br>M(多行搜索)/a><br>全局RegExp对象正则表达式对象相混淆。
虽然这听起来像同样的事情,但他们有很大的不同。
正则表达式对象的属性只包含一个正则表达式和全局RegExp对象的属性包含的信息不断更新,每场比赛。
<br><br>正则表达式对象保存找到的字符串中的字符组合使用的模式。
创建正则表达式对象,或在通过后的字符串的方法,或者字符串被传递给一个正则表达式的方法。
最近搜索的信息被保存在全局RegExp对象。
<br><br>当你事先知道搜索字符串的语法1。
查找的字符串经常变化,或不知道用语法2,如由用户输入的字符串。
<br><br>之前使用模式参数被编译成内部格式。
语法1,加载的脚本,模式编译。
对于语法2,模式之前,使用或调用编译方法编制。
<br><br>-----------,<br>exec方法<br>正则表达式模式在字符串中查找,并返回包含数组的搜索结果,。
<br><br>rgExp.exec(STR)<br><br>参数<br>rgExp<br><br>要求。
包含正则表达式模式和标志的正则表达式对象。
<br><br>海峡<br><br>要求。
在其中执行查找的String对象或字符串文字。
<br><br>exec方法没有找到匹配,则返回null。
如果它发现一个匹配,则exec方法返回一个数组,并且更新全局RegExp对象的属性以反映匹配的结果。
0的数组元素中包含的完全匹配,1到n的元素包含在任何匹配的子匹配。
这相当于没有设置全局标志(g)的比赛。
<br><br>如果正则表达式设置全局标志,exec来lastIndex的值指示的位置开始寻找。
如果你没有设置一个全局标志时,exec忽略的lastIndex的值的字符串的起始位置开始搜索。
<br><br>exec方法返回一个数组具有三个属性的输入,index和lastIndex。
输入属性包含了整个搜索字符串。
索引属性包含查找字符串匹配的子串的位置。
lastIndex属性包含匹配的最后一个字符的下一个位置。
<br><br>例如<br>下面的例子说明了exec方法使用:<br><br>功能RegExpTest(){<br>VAR版=(ScriptEngineMajorVersion()+“。
”+ScriptEngineMinorVersion())<br>(版本>=5.5){//测试JScript版本。
<br>VARSRC=“西班牙的雨主要落在平原上。
”;<br>VARRE=/w+/克;//创建一个正则表达式模式。
<br>VAR改编;<br>((ARR=re.exec(SRC))!=NULL)<br>的document.write(arr.index+“-”+arr.lastIndex+“T“+ARR);}<br><br>其他{<br>alert(”请使用更新版本的JScript);}<br><br>}
java正则表达式和.NET正则表达式有什么区别??????
大体上一致,至少思想上是一致的,但细节方面,各正则表达式引擎还是有所区别的,例如有些正则表达式反向不定长侦测,有些则不支持反向侦测或者要求定长(具有最长限制),java和.NET的引擎总体上都是比较强的。
.NET引擎支持条件匹配,像一般编程语言中的if...then...else之类的,即表示“如果匹配到了A,则接着匹配B,否则接着匹配C”之类的写法,java引擎不支持,只能写两个表达式执行两次了。
java引擎独有的功能是方括号表示的字符集合允许交、并运算,在某些特殊场景下很有用处,例如:想匹配除了“和”、“与”、“及”三个字以外的其它汉字,可以表示为[[u4E00-u9FCB]&&[^和与及]],别的引擎就复杂了,必须用四个区间表示,可读性不佳。
欲知各引擎之间的详细差别,建议下载一个RegEx Buddy软件,其中的帮助中列示很全,找本《精通正则表达式》之类的书看看也行。
常用正则表达式
"^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
请大虾推荐一下专攻正则表达式的书籍。谢谢!
《精通正则表达式》(第3版),电子工业出版社,Jeffrey E.F.Friedl著,余晟 译
当然如果愿意看英文版的是更好了 Mastering Regular Expressions
使用正则表达式的优缺点 C#
书,当然首选《精通正则表达式》 第三版,现在网上也有电子书,你可以看看
我觉得最大的缺点有以下几个方面:
1.正则表达式只适合匹配文本字面,不适合匹配文本意义:像匹配url,email这种纯文本的字符就很好,但比如匹配多少范围到多少范围的数字,如果你这个范围很复杂的话用正则就很麻烦。
或者匹配html,这个是很多人经常遇到的,写一个复杂匹配html的正则很麻烦,不如使用针对特定意义的处理器来处理(比如写语法分析器,dom分析器等)
2.容易引起性能问题:像.*这种贪婪匹配符号很容易造成大量的回溯,性能有时候会有上百万倍的下降,编写好的正则表达式要对正则引擎执行方式有很清楚的理解才可以
3.正则的替换功能较差:甚至没有基本的截取字符串或者把首字母改变大小写的功能,这对于url重写引擎有时候是致命的影响
但是也有优点:只要熟练应用正则表达式,而且匹配的目标是纯文本,那么相比于写分析器来说,正则可以更快速的完成工作。
还有在捕获字符串的能力,正则也可以很好的完成工作,比如截取url的域名或者其他的内容等等
学习正则表达式有哪些入门和进阶的书籍
一、入门 《Java 2从入门到精通》- 推荐 《Thinking in Java》- 强烈推荐* O’reilly的Java编程基础系列 - 参考* 二、进阶 《Java Cook Book》- 非常推荐* (包含了Java编程的Tips,适合当做手册来查阅)