在web开发中正则表达式经常被使用,前台后台都支持正则,之前都是用到某个特定的功能去网上搜对应的表达式。最近项目用到,做完后做了一个系统的正则表达式学习,总结一下。
我写的肯定不是最全面的,而是入门的,让你感觉正则很简单
- 正则表达式的作用是“匹配某种格式的文本”,匹配的作用是对文本进行处理,如:网页内容去标签、修改内容,基本上都是用replace来对匹配的文本处理。
- java中可以用如下方式来替换文本。
String inputStr; //要替换的字符串
String replaceStr; //要替换成的字符串
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(inputStr);
matcher.replaceAll(replaceStr);
- 重点来了:如何写正则。首先明确下正则里有哪些元素,如"^[A-Za-z]+$"这样一个表达式,如何去理解。列举的不全,只为理解,要更深入就要去查更全的资料。
- 通配符:
字符通配符 如 . (任何) \s(空白符) \w(大小写字母) \d(数字) 这些都是常用的,可以记住。而\S就是非空格符,代表反义,其余可以类推。 当然还有常规的a就是匹配a,如果是\则需要用\\来代表
位置通配符 ^( 开头) $(结尾) \b(间隔) 间隔意思是前后不都是\s 。举个例子,\ba 只匹配"aaa a aa"中加粗的a,但注意,\b不等于\s一个代表位置,可以想象为a与前面空格之间的一个位置。 - 括号的含义: (abc) 代表分组,什么意思呢, abcd 中的abc会被这个正则所匹配到(以下用~来代表匹配到)
[abc]代表单字模式,就是匹配单个字,abcd中的a ~ [abc] b~[abc] c~[abc]。
{abc}代表数量,更好理解了{5}就是出现5次,{2,4}就是出现了2到4次,*和+特殊,*是{0,无穷},+是{1,无穷}
组合起来举几个例子:
(abc)[abc]{3} ~ abcbac, abcbbb, abcaaa,abccaa.......
(ab[ab]c*){2} ~ abaccccabbcccccc
- 逻辑:地球人都懂, | (或)。 例子a|b (ab)|(ac)
- 贪婪与懒惰: a.*b a.*?b 匹配abbbbb,前者~abbbbb, 后者~ab。后者懒,只要碰到满足的就够了。
- 断言:a(?=b)是什么意思呢,后面那个就是断言,代表跟着的是b。匹配ab中的a,但不匹配ac中的a。意思就是后面跟着b的a。
- 注释(?#comment)。注释大家都懂。
这下就可以去看例子了,多看几个自己也会写了。
java中如何使用正则表达式
String string = "<span class=\"dddd\">P</span><span class=\"eeee\">P</span>";
Pattern p = Pattern.compile("<[^>]*?>");
Matcher m = p.matcher(matchScore);
string = m.replaceAll("");
System.out.println(string);
输出 PP
首先定义个Pattern ,然后根据Pattern去match目标字符串。
m.group()表示匹配到的串
m.replaceAll("")也很常用