--- title: 正则表达式的一些理解,?问号的用法 逻辑非的表达== url: 'https://yayi.site/archives/正则表达式的一些理解问号的用法逻辑非的表达' categories: java cover: 'https://cdn.jsdelivr.net/gh/yan-bolan/picbed/img/动漫/結城友奈は勇者である/東郷·美森.png' tags: '正则表达式,学习正则理解增加,java' abbrlink: 9641a9b7 date: 2020-05-25 22:27:37 updated: 2021-05-14 22:05:05 --- ### $1 正则表达式的部分替换 比如要替换字符串"我是程序员呀"里面的"程序员",替换为"工程师"。直接模式匹配是可以的,但是如果更加复杂就难了。 使用正则可以做到。 如 原始字符串:我是程序员呀 正则:(.\*)(程序员)(.\*) 替换为:$1工程师$3 如上即可,其中$1和$3分别代表第1个和第3个括号内匹配到的内容。 ### .号是所有,\*是前面的表达式一个或多个 \> 还是视频学习比较好 \[https://www.cnblogs.com/hjbky/p/9512022.html\](https://www.cnblogs.com/hjbky/p/9512022.html) 行的开始和结束 开始符号:\^ 结束符号:$ 如:\^cat 应该理解为以c作为一行的第一个字符,紧接着是a,然后是t 例如:String str = "catabdcatdetfcat" \^cat : 验证该行以c开头紧接着是a,然后是t cat$ : 验证该行以t结尾倒数第二个字符为a倒数第三个字符为c \^cat$: 以c开头接着是a-\>t然后是行结束:只有cat三个字母的数据行 \^$ : 开头之后马上结束:空白行,不包括任何字符 \^ : 行的开头,可以匹配任何行,因为每个行都有行开头 ()是组,所以\|或逻辑要写在 ( \| )里面 ## 正则表达式也是有风格的。 perl风格 --- \`\`\`js # 表达式 #i \`\`\` #是分隔符,#号里面是一个正则表达式,i是==修饰符==,表示不区分大小写。修饰的是表达式,对表达式的一种说明。 --- x\|y 这里的\|表示一种或关系,左右是一个==整体== ,如 zoo\|food 匹配zoo 这个单词或者food这个单词。一个==整体== \[xyz\] 表示一个==集合,并且是或(不能与)的关系== 指的是 x,或者y ,或者z 如何 把 xb\|yz 放到 \[ \] 里面会怎么样?\[xb\|yz\] 表示 xb 或者yz 还是四个字母? \| 表示 一种分支? --- \[a-z\] 指一个==范围==的集合, 或关系。 --- 正则表达式是由==普通字符(a\~z)==和==元字符(代表含义,特殊字符)==组成的。 \\B \\D之类转义的是正则表达式的==扩充语法== --- --- \> 扩展知识: \> 逻辑非 可以用零向负宽表达。 \> ?问号跟在表达式后面表示 ,匹配多次0-n。但跟在==其他限制符==后面时,表示非贪婪的。 \> \>(pattern)是获取与储存匹配到的结果。但前面跟?:时 \>(?:pattern)时表示不储存结果 。有什么用呢,比如:industr(?:y\|ies) 比industry\|industries 更简洁 \>(?=pattern)正向预查:在任何匹配pattern的字符串处开始匹配查找字符串。这是==一个非获取匹配==,就是说,不需要获取供以后使用。 \>有什么用呢?比如 window(?=95\|7\|10) 能\*\*匹配到window10中的window\*\*,注意此时10是 不匹配的。但是\*\*不能匹配window3中的window\*\*。==预查不消耗字符==,就是一个匹配后,在最后一次匹配之后立即开始,而不是从包含预查的字符之后开始。 \> (?!pattern)。负向预查。在任何不匹配pattern的字符串开始处匹配查找字符串,这是一个非获取匹配。比如:window3.1 可以匹配window,而不能匹配window10。预查不消耗字符。 \> 有什么用? \> 可以用于==逻辑非的表达== \>逻辑或 x\|y 。z\|food 表示 z或者food。与括号组合:(z\|f)ood 表示 zood 或者food \>\[xyz\] 则表示字符集合。与\| 结合:\[x\|y\|z\] 这是什么? \>\[\^xyy\]这是负值字符集合,匹配未包含的任意字符。(注意 \^放外面与外面 是不一样的哦。外面 \`\^\[xx\]\`表示 开头加xx )是否也可用于==逻辑非==的表达呢? \>\[a-z\] 。-表示字符范围。 注意:以上是perl兼容的正则风格。实际上。其它语言的正则是不一样的。比如,js,java,python都有自己的风格。 perl 除了上面由==普通字符和元字符==组成的正则表达式之外 ,还有扩充语法: 如\\D \\W 之类 转义的就是扩充语法。