正则表达式

正则表达式的语法

如果要灵活运用正则表达式,必须了解各种元字符的功能,元字符从功能上大致分为:

  1. 元字符-转义符 \\

    需要用到转义符号的字符有: . * + ( ) $ / \ ? [ ] ^ { }

  2. 限定符
    符号 含义 示例 说明 匹配输入
    * 指定字符重复0次或n次(零到多) (abc)* 仅包含任意个abc的字符串,等效与\w* abc、abcabc
    + 指定字符重复1次或n次(至少一次) m+(abc)* 以至少一个m开头,后接任意一个abc字符串 mabc、mmmabcabc
    指定字符重复0次或1次(最多一次) m+abc? 以至少1个m开头,后接ab或abc的字符串 mab、mabc、mmmab、mmabc
    {n} 只能输入n个字符 [abcd]{3} 由abcd中的字母组成的任意长度为3的字符串 abc,dbc,adc
    {n,} 指定至少n个匹配 [abcd]{3,} 由abcd中的字母组成的任意长度不小于3的字符串 aab、dbc、aaadbc
    {n,m} 指定至少n个但不多于m个匹配 [abcd]{3,5} 由abcd中的字母组成的任意长度不小于3,不大于5的字符串 abc,dbc,adc
  3. 选择匹配符

    | 匹配 "|"之前或之后的表达式 ab|cd ab或cd

  4. 分组组合和反向引用符
    符号 说明
    pattern 非命名捕获。捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其他捕获结果则根据左括号的顺序从1开始自动编号
    (?<name> pattern) 命名捕获。将匹配的字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含标点符号,并且不能以数字开头,可以使用单引号替代尖括号,例如(?<name>)(?'name')
    (?:pattern) 非捕获匹配,不存储供以后使用的匹配。匹配 pattern 但不捕获该匹配的子表达式,这对于用"or"字符()组合模式部件的情况很有用。例如,'industr(?∶ylies)是比'industry lindustries'更经济的表达式。
    (?=pattern) 非捕获匹配。例如,"Windows(?=95198 NT 2000)'匹配 "Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。
    (?!pattern) 非捕获匹配。该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。例如,'Windows(?!95198 NT 2000)'匹配"Windows 3.1"中的"Windows",但不匹配"Windows 2000"中的"Windows"。
  5. 特殊字符
  6. 字符匹配符
    符号 符号 示例 解释 匹配输入
    [] 可接收的字符列表 [name] n,a,m,e 中的任意字符
    [^] 不接收的字符列表 [^abc] 除 a,b,c 以外的任意字符,包括特殊符号和数字
    - 连字符 A-Z 任意单个大写字母
    . 匹配除 \n 以外的任何字符 a..b 以a开头,b结尾,中间包括2个任意字符的长度为4的字符串 aaab、aefb、a35b、a#*b
    \d 匹配单个数字字符,相当于[0-9] \d{3}(\d)? 包含3个或4个数字的字符串 123、9876
    \D 匹配单个非数字字符,相当于[^0-9] \D(\d)* 以单个非数字字符开头,后接任意个数字字符 z、A345
    \w 匹配单个数字,大小写字母字符,相当于[0-9a-zA-Z] \d{3}\w{4} 以3个数字字符开头的长度为7的数字字母字符串 234sdf8、4543dfd
    \W 匹配单个非数字,大小写字母字符,相当于[^0-9a-zA-Z] \W+\d{2} 以至少1个非数字字母字符开头,2个数字字符结尾的字符串 #29、%#¥78
    ?! 不区分字母大小写 (?!)abc 表示不区分abc大小写 a(?!)bc、a((?!)b)c
    \s 匹配任何空白字符 \s 包括空格,回车 /r/n
    \S 匹配所有非空白字符 | \S 除空格以外的所有字符 4567890¥%……&*nameName
  7. 定位符
    符号 含义 示例 说明 匹配输入
    ^ 指定起始字符 ^[0-9]+[a-z]* 以至少1个数字开头,后接任意个小写字母的字符串 123、6aa、555edf
    $ 指定结束字符 ^[0-9]+[a-z]+$ 以至少1个数字开头后接连字符"-",并以至少1个小写字母结尾的字符串 1-a
    \b 匹配目标字符串的边界 han\b 这里说的字符串边界指的是子串间有空格,或者是目标字符串的结束位置(边界是指:被匹配的字符串最后,也可以是空格的子字符串的后面) hanshunping、sphan、nnhan
    \B 匹配目标字符串的非边界 han\B 和\b的含义刚刚相反 hanshunping
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容