设为首页 收藏本站
查看: 1174|回复: 0

[经验分享] php、linux、javascript 正则表达式

[复制链接]

尚未签到

发表于 2018-12-12 07:58:10 | 显示全部楼层 |阅读模式
  PHP
  正则表达式中包含三种元素分别为:量词、元字符、修饰符
量词              
语法                    描述


  • 匹配任何至少包含一个前导字符串
  • 匹配任何包含零个或多个前导字符串
    ?              匹配任何包含零个或一个前导字符串
    .               匹配任意字符串
    {x}            匹配任何包含 x 个前导字符串
    {x,y}         匹配任何包含 x 到 y 个前导字符串
    {x,}           匹配任何包含至少 x 个前导字符串
    $              匹配字符串的行尾
    ^             匹配字符串的行首
    |               匹配字符串的左边或者右边
    ()              包围一个字符分组或定义个反引用,可以使用\1\2 提取
  元字符            
语法                    描述
[a-z]           匹配任何包含小写字母 a-z的字符串
[A-Z]          匹配任何包含大写字母 A-Z的字符串
[0-9]          匹配任何包含数字 0-9 的字符串
[abc]          匹配任何包含小写字母 a、b、c的字符串
[âbc]          匹配任何不包含小写字母 a、b、c的字符串
[a-zA-Z0-9_]匹配任何包含 a-zA-Z0-9 和下划线的字符串
\w              匹配任何包含 a-zA-Z0-9 和下划线的字符串(同上)
\W              匹配任何没有下划线和字母数字的字符串
\d               匹配任何数字字符,和[0-9]相同
\D               匹配任何非数字字符,和[^0-9]相同
\s                匹配任何空白字符
\S               匹配任何非空白字符
\b               匹配是否到达了单词边界
\B               匹配是否没有达到单词边界
\                 匹配正则中的特殊字符
  修饰符
语法               描述
i                完成不区分大小写的搜索
m              在匹配首内容或者尾内容时候采用多行识别匹配
x               忽略正则中的空白
A               强制从头开始匹配
U               禁止贪婪匹配 只跟踪到最近的一个匹配符并结束

* preg_filter — 执行一个正则表达式搜索和替换
* preg_grep — 返回匹配模式的数组条目
* preg_last_error — 返回最后一个PCRE正则执行产生的错误代码
* preg_match_all — 执行一个全局正则表达式匹配
* preg_match — 执行一个正则表达式匹配
* preg_quote — 转义正则表达式字符
* preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调进行替换
* preg_replace — 执行一个正则表达式的搜索和替换
* preg_split — 通过一个正则表达式分隔字符串
  $pattern = '/([\d])\/([\d])\/([\d]*)/';
$string = '26/06/2014';
echo preg_replace($pattern, "$3/$2/$1", $string);
  javascript

创建方式:
1.
var pattern = new RegExp('box');
var pattern = new RegExp('box','ig');
2.
var pattern = /box/;
var pattern = /box/ig;  
  模式修饰符的可选参数
参数                         含义
i                          忽略大小写
g                         全局匹配
m                         多行匹配
  RegExp 对象的方法
方法                              功能
test                在字符串中测试模式匹配,返回 true 或 false
exec               在字符串中执行匹配搜索,返回结果数组
例1: var pattern = /box/i;
var str = "This is a Box!";
alert(pattern.test(str));
例2: var pattern = /box/i;
var str = "This is a Box!";
alert(pattern.exec(str));
  String 对象也提供了 4 个使用正则表达式的方法。
  方法                                                                 含义
match(pattern)                                        返回 pattern 中的子串或 null
replace(pattern, replacement)                  用 replacement 替换 pattern
search(pattern)                                        返回字符串中 pattern 开始位置
split(pattern)                                            返回字符串按指定 pattern 拆分的数组
  RegExp 对象的静态属性
属性                                        短名                                   含义
input                                        $_                           当前被匹配的字符串
lastMatch                                 $&                         最后一个匹配字符串
lastParen                                   $+                         最后一对圆括号内的匹配子串
leftContext                              $`                            最后一次匹配前的子串
multiline                                   $*                           用于指定是否所有的表达式都用于多行的布尔值
rightContext                              $'                           在上次匹配之后的子串
  单个字符和数字
元字符/元符号                    匹配情况
.                              匹配除换行符外的任意字符
[a-z0-9]                    匹配括号中的字符集中的任意字符
[â-z0-9]                    匹配任意不在括号中的字符集中的字符
\d                         匹配数字
\D                         匹配非数字,同[^0-9]相同
\w                         匹配字母和数字及
\W                         匹配非字母和数字及

  字符类:空白字符
元字符/元符号               匹配情况
\0                              匹配 null 字符
\b                              匹配空格字符
\f                              匹配进纸字符
\n                              匹配换行符
\r                              匹配回车字符
\t                               匹配制表符
\s                              匹配空白字符、空格、制表符和换行符
\S                              匹配非空白字符
  字符类:锚字符
元字符/元符号               匹配情况
^                                   行首匹配
$                                   行尾匹配
\A                              只有匹配字符串开始处
\b                              匹配单词边界,词在[]内时无效
\B                              匹配非单词边界
\G                              匹配当前搜索的开始位置
\Z                              匹配字符串结束处或行尾
\z                              只匹配字符串结束处
  字符类:重复字符
元字符/元符号                         匹配情况
x?                              匹配 0 个或 1 个 x
x*                              匹配 0 个或任意多个 x
x+                              匹配至少一个 x
(xyz)+                         匹配至少一个(xyz)
x{m,n}                         匹配最少 m 个、最多 n 个 x
  字符类:替代字符
元字符/元符号                    匹配情况
this|where|logo          匹配 this 或 where 或 logo 中任意一个
  字符类:记录字符
元字符/元符号                    匹配情况
(string)                    用于反向引用的分组
\1 或$1                    匹配第一个分组中的内容
\2 或$2                    匹配第二个分组中的内容
\3 或$3                     匹配第三个分组中的内容
var pattern = /(\d)\/(\d)\/(\d*)/;
var str = '26/06/2014';
var result = str.replace(pattern,'$3/$2/$1');
alert(result);
  linux
  字符类代表意义[:alnum:]代表英文大小写字符及数字,即0-9,A-Z,a-z[:alpha:]代表任何英文大小字符,即A-Z,a-z[:lower:]代表小写字符,即a-z[:upper:]代表大写字符,即A-Z[:digit:]代表数字,即0-9[:xdigit:]代表十六进制的数字类型,因此包括0-9,A-F,a-f的数字与字符[:blank:]代表空格键与tab按键[:graph:]除了空格与tab按键之外的其它所有按键[:space:]任何会产生空白的字符,包括空格键,Tab键,CR等[:cntrl:]代表键盘上面的控制按键,既包括CR,LF,Tab,Del等[:print:]代表任意可打印字符[:punct:]代表标点符号,即" ' ? ! ; : # $
  基础正则表达式语法(RE语法):一个字符串如果是正则表达式表示的,则其中的任意字符被称为RE字符。
  特殊字符为:
只支持普通正则表达式语法    ^  $  .   \  [  ]  "  '      
支持扩展正则表达式语法        ^  $  .  
\  [  ]  "  '  +  ?  | ( ) 基础RE字符意义与范例^word
意义:待查找的字符串(word)在行首
范例:查找行首为#开头的哪一行,并列出行号
grep -n '^#' regular_express.txtword$
意义:待查找的字符串(word)在行尾
范例:将行尾为!的那一行打印出来,并列出行号
grep -n '!$' regular_express.txt.
意义:代表一定有一个任意字符的字符(除换行符),在awk中可匹配换行符
范例:查找的字符串可以使(eve)(eae)(eee)等,即e与e之间一定要有一个字符,不能是(ee)!
grep -n 'e.e' regular_express.txt \
意义:转义字符,将特殊符号的特殊意义去除,将普通字符变为特殊字符。
范例:查找含有单引号'的那一行
grep -n \' regular_express.txt  
意义:重复0个到无穷多个前一个字符
范例:找出含有(es)(ess)(esss)等的字符串,注意,因为
可以是0个,所以es也是符合待查找字符串。另外,因为为重复“前一个RE字符”的符号,因此在之前一定要紧接着一个RE字符!例如任意字符则为.
grep -n 'ess
' regular_express.txt

    意义:从字符集合的RE字符里面找出想要选取的字符(不包括换行符),在awk中可以包含换行符。注意此时中括号里的.*等特殊字符均变成一般字符(除了[])。
    范例:查找含有(gl)或(gd)的那一行,需要特别留意的是,在[]当中代表一个待查找的字符,例如“a[afl]y”代表查找的字符串可以是aay,afy,或aly
    grep -n 'g[ld]' regular_express.txt[n1-n2]
    意义:从字符集和的RE字符里面找出想要选取的字符范围
    范例:查找含有任意数字的那一行。需特别留意,在字符集合[]中的减号-是有特殊含义的,它代表两个字符之间的所有连续字符(与编码顺序有关)
    grep -n '[0-9]' regular_express.txt[^list]
    意义:反向选择
    范例:查找的字符串可以是(oog)(ood)但不能是(oot)
    grep -n 'oo[^t]' regular_express.txt
    {n}
    {n,}
    {n,m}
    意义:连续n到m个的前一个RE字符,若为{n}则是连续n个的前一个RE字符,若为{n,}则是连续n个以上的前一个RE字符 。
    在支持扩展的正则表达式中用另一种形式,且n,m必须是0到255之间的整数:
    注:本质上是扩展正则表达式的语法
    范例:在g与g之间有2个到3个的o存在的字符串
    grep -n 'go{2,3}' regular_express.txt  
    4 扩展的正则表达式语法
    若要支持:
    grep需加-E (或者使用到扩展符号时加\)         
    sed需加-r  (或者使用到扩展符号时加\)
      awk,perl本身支持扩展这则表达式(也就是说awk中如果要引用(为普通字符要[(]如此使用。)扩展RE字符意义与范例+
    意义:重复一个或一个以上的前一个RE字符
    o+代表一个以上的o?
    意义:零个或一个的前一个RE字符
    o?代表空或o|
    意义:用或(or)的方式找出数个字符串,两边的字符串不能加额外的空格,
    ABC|DEF表示ABC或DEF,A(BC|DE)F表示ABCF或ADEF
    范例:去除空白行和行首为#的行
    grep -Env '^$|^#' regular_express.txt  ()
    意义:找出“组”字符串,[]的引申
    范例:查找glad或good这两个字符串,因为g与d是重复的,所以可以将la与oo以或的方式列于()中
    grep -En 'g(la|oo)d' regular_express.txt ()+意义:重复一个或一个以上的前一个“组”
    {n}
    {n,}
    {n,m}与普通正则表达式含义一致,只是在支持扩展正则表达式中要用此形式,即awk、grep -E、sed -r 中使用。
    5,元字符
      元字符:是一种perl风格的正则表达式,只有一部分文本处理工具支持它,并不是所有的工具都支持。
    相当于[字符集]的简写。元字符意义和范例\b
    意义:单词边界
    范例:\bcool\b匹配cool但不匹配coolant,特殊字符后面不能加 ? +等量词\B
    意义:非单词边界
    范例:cool\B匹配coolant但不匹配cool,特殊字符后面不能加
    ? +等量词\d
    意义:单个数字字符
    范例:b\db匹配b2b,但不匹配bcb\D
    意义:单个非数字字符
    范例:b\Db匹配bcb,但不匹配b2b\w
    意义:单个单词字符(字母、数字与_)
    范例:\w匹配1或a等,但不匹配%等\W意义:单个非单词字符\n意义:换行符\s意义:单个空白字符,换页、制表、换行、回车以及空格。[\f\t\n\r ]\S意义:单个非空白字符\r意义:回车
    6,几种有用的正则表达式项目正则表达式匹配正规文本中的单词
    \b[[:alpha:]]+\b

    (^| )["({[]book[]})"?,.:;!'s ]( |$)匹配空行^$匹配含有空格的空白行和空行^空格$匹配整个行^.$匹配一个或多个空格空格空格匹配s前面含有任意abc随机组合的字符串[abc]s匹配格式化的美元数额\$[空格0-9]*.[0-9][0-9]匹配电子邮件地址[A-Za-z0-9.]+@[A-Za-z0-9.]+.[a-zA-Z]{2,4}匹配一个HTTP URLhttp://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}
      linux通配符
    shell通配符
    注意,这里的通配符虽然和正则表达式相似,但是是基于bash解释器解析的,而正则表达式由正则引擎的软件(如awk,grep,sed等)解析,二者完全不同。
      通配符字符
      *代表0个或多个任意字符?代表一定有一个任意字符[ ][abcd],表示一个字符,或a或b或c或d[-][0-9],表示一个数字,0到9之间的某个[^][^abc],表示一个字符,且不是a、b、c
      范例:
      [python] view plaincopy


    • [root@linux ~]# ls test     #那个 代表后面不论接几个字符都予以接受
    • [root@linux ~]# ls test?     #那个 ? 代表后面"一定"要接"一个"字符
    • [root@linux ~]# ls test???   #那个 ??? 代表"一定要接三个"字符!
    • [root@linux ~]# cp test[1-5] /tmp  # 将 test1, test2, test3, test4, test5 若存在的话,就拷贝到 /tmp
    • [root@linux ~]# cp test[!1-5] /tmp # 只要不是 test1, test2, test3, test4, test5 之外的其它 test?拷贝到 /tmp
    • [root@linux ~]# cd /lib/modules/uname -r/kernel/drivers  # 系统先执行 uname -r 找出输出结果;将结果累加在目录上面,来执行 cd 的功能!
    • = cd /lib/modules/$(uname -r)/kernel  #另外,这个 quot (`) 的功能,也可以利用 $() 来取代喔!
    • [root@linux ~]# cp [A-Z] /tmp   #表示文件中包含大写字母
    • [root@linux ~]# ls -lda /etc/[35] #表示文件中包含数字3或者5.
      正则表达式(regular express)基本上是一种“表示法”,他是以行为单位来进行字符串的处理行为。只能使用在支持它的工具程序(如vi、grep、awk、sed中)。正则表达式与shell通配符的关系就像是局部变量和全局变量的关系(即以后遇到一个命令如果支持正则表达式,则通配符概念抛弃。否则使用通配符)。
      更多文章请关注:http://www.ilovehai.com




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-650303-1-1.html 上篇帖子: 你应该这个姿势学习PHP(4) 下篇帖子: php+mysql实现英汉查询词典的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表