正则表达式
Posted eimadrigal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
先看一个判断Email地址是否合法的例子:
"\w+@\w+(\.\w{2,3})*\.\w{2,3}"
一般Email地址的格式为:X@X.com
,X
表示一个或多个字符,.com
后面可能还会跟有.cn
等。总结这些规律,我们用上述的regex来匹配。
当然,这种匹配可能会遗漏某些特殊的Email地址,想要更大范围的覆盖,还需要更为复杂精巧的设计。
接着解释下上面的regex:
\w
表示匹配字母/数字/下划线/汉字;
+
表示字符可以出现一次/多次;
(\.\w{2,3})*
表示类似.edu
格式的字符串可以出现零次/多次。
在计算机科学中一般表示转义,形如
w
的叫做元字符,类似的还有:
元字符 | 意义 |
---|---|
. | 除换行符外任意字符 |
d | 数字 |
w | 字母/数字/汉字/下划线 |
单词的开始/结束 | |
^ | 字符串的开始 |
$ | 字符串的结束 |
还可以通过[]
表示元字符:
"[abc]23"
这样a23
,b23
,c23
都是匹配的字符串。
形如+
,*
叫做修饰限定符,用来控制某类串重复多少次:
修饰限定符 | 意义 |
---|---|
* | 0次/多次 |
+ | 1次/多次 |
? | 0次/1次 |
{n} | n次 |
{n,} | n次/更多次 |
{n,m} | n~m次 |
很多语言和文本编辑器都集成了正则表达式引擎,以Java为例来测试下上述例子:
public static void main(String[] args) {
String regex = "\w+@\w+(\.\w{2,3})*\.\w{2,3}";
String s1 = "hello@stu.edu.cn";
if(s1.matches(regex))
System.out.println("Valid Address!");
}
上述内容只是最最基本的关于正则表达式的知识,还有零宽断言、递归匹配等更加复杂的内容有待挖掘~
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性