国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > 精通正则表达式(2)

精通正则表达式(2)

来源:程序员人生   发布时间:2015-03-28 08:56:27 阅读次数:3130次

正则表达式还有另外一种正则表达式字面量的声明方式

正则表达式语法参考

var=/a/gi 两个/线分隔是模式,最后g表示全局,i表示字母不辨别大小

正则表达式对象的方法:

  • test,返回1个 Boolean 值,它指出在被查找的字符串中是不是存在模式。如果存在则返回 true,否则就返回 false。
  • exec,用正则表达式模式在字符串中运行查找,并返回并含该查找结果的1个数组。
  • compile,把正则表达式编译为内部格式,从而履行得更快。

正则表达式对象的属性

  • source,返回正则表达式模式的文本的复本。只读。
  • lastIndex,返回字符位置,它是被查找字符串中下1次成功匹配的开始位置。
  • $1…$9,返回9个在模式匹配期间找到的、最近保存的部份。只读。
  • input ($_),返回履行规范表述查找的字符串。只读。
  • lastMatch ($&),返回任何正则表达式搜索进程中的最后匹配的字符。只读。
  • lastParen ($+),如果有的话,返回任何正则表达式查找进程中最后括的子匹配。只读。
  • leftContext ($`),返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读。
  • rightContext ($’),返回被搜索的字符串中从最后1个匹配位置开始到字符串结尾之间的字符。只读。

String对象1些和正则表达式相干的方法

  • match,找到1个或多个正则表达式的匹配。
  • replace,替换与正则表达式匹配的子串。
  • search,检索与正则表达式相匹配的值。
  • split,把字符串分割为字符串数组。

下面举实例来讲明如何利用


re = /s/;// s匹配任何空白字符,包括空格、制表符、换页符等等 str= "user Name";//用户名包括空格 alert(re.test(str));//true str = "user Name";//用户名包括制表符 alert(re.test(str));//true re = /^[a-z]+.$/i; //^表示开始 $表示字符结束位置 alert(re.test("hi111tt"));//false alert(re.test("h.")); //true var re = /^[a-z]+s+d+$/i; //+号表示字符最少要出现1次,s表示空白字符,d表示1个数字 alert(re.test("abc 11222")); //true alert(re.test("abc 11222abc")); //fals //当时我们想取出里面的数字 re = /d+/ var result = re.exec(str); alert(result); //11222 //更复杂的用法,使用子匹配 //exec返回的数组第1到n元素中包括的是匹配中出现的任意1个子匹配 re=/^[a-z]+s+(d+)$/i;//用()来创建子匹配 arr =re.exec(osVersion); alert(arr[0]);//全部osVersion,也就是正则表达式的完全匹配 alert(arr[1]);//8,第1个子匹配,事实也能够这样取出主版本号 alert(arr.length);//2 osVersion = "Ubuntu 8.10";//取出主版本号和次版本号 re = /^[a-z]+s+(d+).(d+)$/i;//.是正则表达式元字符之1,若要用它的字面意义须转义 arr = re.exec(osVersion); alert(arr[0]);//完全的osVersion alert(arr[1]);//8 alert(arr[2]);//10
//String对象的1些和正则表达式有关的方法 //replace方法,用于替换字符串 var str ="some money"; alert(str.replace("some","much"));//much money //replace的第1个参数可以为正则表达式 var re = /s/;//空白字符 alert(str.replace(re,"%"));//some%money //在不知道字符串中有多少空白字符时,正则表达式极其方便 str ="some some some f"; re = /s+/; alert(str.replace(re,"#"));//但是这样只会将第1次出现的1堆空白字符替换掉 //由于1个正则表达式只能进行1次匹配,s+匹配了第1个空格后就退出了 re = /s+/g; //g,全局标志,将使正则表达式匹配全部字符串 alert(str.replace(re,"@"));//some@some@some@ //另外一个与之类似的是split,以某个字符分隔 var str = "a-bd-c"; var arr = str.split("-");//返回["a","bd","c"] str = "a_db-c";//用户以他喜欢的方式加分隔符s re=/[^a-z]/i;//前面我们说^表示字符开始,但在[]里它表示1个非字符集 //匹配任何不在指定范围内的任意字符,这里将匹配除字母处的所有字符 arr = str.split(re);//仍返回["a","bd","c"]; //在字符串中查找时我们经常使用indexOf,与之对利用于正则查找的方法是search,找不到返回⑴ str = "My age is 18.Golden age!";//年龄不是1定的,我们用indexOf不能查找它的位置 re = /d+/; alert(str.search(re));//返回查找到的字符串开始下标10 //注意,由于查找本身就是出现第1次就立即返回,所以无需在search时使用g标志 //下面的代码虽然不出错,但g标志是过剩的 re=/d+/g; alert(str.search(re));//依然是10 var str = "My name is Chenfei.Hello everyone!"; var re = /[A-Z]/;//匹配所有大写字母 var arr = str.match(re);//返回数组 alert(arr);//数组中只会包括1个M,由于我们没有使用全局匹配 re = /[A-Z]/g; arr = str.match(re); alert(arr);//M,C,J,H //从字符串中抽取单词 re = /[a-z]*/gi;//表示单词边界 *表示0个或多个 str = "one two three four"; alert(str.match(re));//one,two,three,four //RegExp对象的静态属性 //input 最后用于匹配的字符串(传递给test,exec方法的字符串) var re = /[A-Z]/; var str = "Hello,World!!!"; var arr = re.exec(str); alert(RegExp.input);//Hello,World!!! re.exec("tempstr"); alert(RegExp.input);//依然是Hello,World!!!,由于tempstr不匹配 //lastMatch 最后匹配的字符 re = /[a-z]/g; str = "hi"; re.test(str); alert(RegExp.lastMatch);//h re.test(str); alert(RegExp["$&"]);//i ,$&是lastMatch的短名字,但由于它不是合法变量名,所以要。。 //lastParen 最后匹配的分组 re = /[a-z](d+)/gi; str = "Class1 Class2 Class3"; re.test(str); alert(RegExp.lastParen);//1 re.test(str); alert(RegExp["$+"]);//2 //leftContext 返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符 //rigthContext 返回被搜索的字符串中从最后1个匹配位置开始到字符串结尾之间的字符 re = /[A-Z]/g; str = "123ABC456"; re.test(str); alert(RegExp.leftContext);//123 alert(RegExp.rightContext);//BC456 re.test(str); alert(RegExp["$`"]);//123A alert(RegExp["$'"]);//C456 re = /[A-Z]+/g; str = "123ABC456"; re.test(str); alert(RegExp.leftContext);//123 alert(RegExp.rightContext);//456 //使用元字符注意事项:元字符是正则表达式的1部份,当我们要匹配正则表达式本身时,//必须对这些元字符转义.下面是正则表达式用到的所有元字符 ( [ { ^ $ | ) ? * + . var str = "?"; var re = /?/; alert(re.test(str));//出错,由于?是元字符,必须转义 re = /?/; alert(re.test(str));//true 下面是正则表达式中的预定义类 代码 同等于 匹配 . IE下[^ ],其它[^ ] 匹配除换行符以外的任何1个字符 d [0-9] 匹配数字 D [^0-9] 匹配非数字字符 s [ fx0B] 匹配1个空白字符 S [^ fx0B] 匹配1个非空白字符 w [a-zA-Z0-9_] 匹配字母数字和下划线 W [^a-zA-Z0-9_] 匹配除字母数字下划线以外的字符

量词(下表量词单个出现时皆是贪婪量词)

  • * 匹配前面的子表达式零次或屡次。例如,zo* 能匹配 “z” 和 “zoo”。 * 等价于{0,},表示可以有0个或多个o。

  • + 匹配前面的子表达式1次或屡次。例如,’zo+’ 能匹配 “zo” 和 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

  • ? 匹配前面的子表达式零次或1次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。

  • {n} n 是1个非负整数。匹配肯定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。

  • {n, } n 是1个非负整数。最少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。

  • {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, “o{1,3}” 将匹配 “fooooood” 中的前3个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生