您的位置:首页 > 其它

正则表达式

2017-12-30 13:27 155 查看

正则表达式(Reglar Expression):

基本语法:

普通字符:字母、数字、汉字、下划线以及没有特殊定义的标点符号都是”普通字符”。

表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

高级语法:

大小写是取反的意思。

\d : 0-9之间任意的一个数字。

\D :0-9之间任意的一个非数字。

\w :任意一个字母数字下划线。

\W :任意一个除了字母数字下划线。

\s :匹配空白符。(空格、制表符、换行符)

\S :匹配非空白符。

. :匹配任意一个字符(除了换行符)。

[\s\S] :匹配所有字符。

自定义字符集合:

[a57%]  :匹配"a"或"5"或"7"或"%"的其中一个。
[^abc]  :匹配"a""b""c"之外的任意一个字符。
[f-k] :匹配"f"-"k"之间的字符。
[^2-8a-n]:匹配"a"-"n",2-8之外的任意字符。
正则表达式的特殊符号,被包含到[]中,则失去特殊意义,除了 ^  - 之外。
标准字符集合除了  .  外如果包含于[]中,自定义字符集合将包含该集合。


量词:

{n}:修饰前一个表达式重复n次。
{m,n}:最少m次,最多n次。
{m,}:至少m次。
贪婪模式:量词默认的是匹配最多数。
勉强模式:要想匹配最少数就停止,在{}后加上?即可。
?:这里与紧跟在{}后的?不同。它相当于{0,1}的意思。
+  :表达式至少出现1次,相当于{1,}。
*  :表达式不出现或者出现任意次,相当于{0,}。


字符边界:

^  :只匹配字符串开始的字符位置。
$  :只匹配字符串结束的字符位置。
\b :前面的字符和后面的字符不全是\w的字符位置。
匹配模式:
IGNORECASE:匹配字符时忽略大小写。
SIGLELINE:单行模式,整个文本作为一行。
MULTILINE:多行模式,一行作为一个文本。
在多行模式下若要匹配开头字符,在字符前加上\A即可。
在多行模式下若要匹配结束字符,在字符后加上\Z即可。


选择符和分组:

|:匹配左边或者右边。
():捕获组。在组中匹配到的字符再次重复一次。
例如:goto  gogo   toto  togo
想要获得gogo    toto的话
应该这样写:([a-z]{2})\1
[a-z]{2}会匹配以上所有,
一个括号为一组,从1开始。那么[a-z]{2}整体为第一组。
第一次匹配到的go会存起来。后面的\1表示第一组再次重复。
即只能匹配到go后面还是go的。
同样。第二次匹配到的to是一样的。
分组规则:
(([1-9]{3})([a-z]))([^s-d])
([1-9]{3})([a-z])为第一组。\1
([1-9]{3})为第二组。\2
([a-z])为第三组。\3
([^s-d])为第四组。\4
(?:):非捕获组。
捕获组会把第一次匹配到的字符存在内存里,
只要求()作为组织结构的作用时,可以使用。
但是肯定就不能起到捕获组的作用了。


预搜索(零宽断言、环视):

(?=表达式):只能匹配到以表达式结尾的前面的字符。
(?!表达式):只能匹配到不以表达式结尾的前面的字符。
(?<=表达式):只能匹配到以表达式开头的后面的字符。
(?<!表达式):只能匹配到不以表达式开头的后面的字符。
本身断言匹配到的是不会计入字符的,只会匹配到断言匹配到的前面的字符。


Java复杂文本操作:

Java相关的正则表达式位于java.util.regex包下

Pattern类:正则表达式对象。

Matcher类:匹配对象。matches():将整个字符串与正则匹配。

find():扫描输入的序列查找与该模式匹配的下一个子序列。

group():将find的方法匹配的字符串返回。

replace():将正则对象的匹配规则所指定的字符替换为方法指定的字符。

split():分隔操作。

public class RegexTest {
public static void main(String[] args) {
//在asd131656498匹配整个字符串。\w+
//表达式
abd7
对象
Pattern p=Pattern.compile("\\w+");
//创建匹配对象
Matcher m=p.matcher("asd1514&&654561");
boolean matches = m.matches();
//调用匹配引擎匹配
System.out.println(matches);
}
}


关于正则内容过一遍大致有印象即可。等到需要时再细细研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: