到底什么是正则表达式?
在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
常用元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用限定符
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
n | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用反义词
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
中文字符
[\u4e00-\u9fa5]
JS
var pattern = /[\u4e00-\u9fa5]/,
str = '';
console.log(pattern.test(str));
PHP
$str = '';
$isMatched = preg_match('/[\u4e00-\u9fa5]/', $str, $matches);
var_dump($isMatched, $matches);
go
package main
import (
"fmt"
"regexp"
)
func main() {
str := ""
matched, err := regexp.MatchString("[\u4e00-\u9fa5]", str)
fmt.Println(matched, err)
}
JAVA
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
String str = "";
String pattern = "[\u4e00-\u9fa5]";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
}
}
rb
pattern = /[\u4e00-\u9fa5]/
str = ''
p pattern.match(str)
py
import re
pattern = re.compile(ur'[\u4e00-\u9fa5]')
str = u''
print(pattern.search(str))
Email地址
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
String str = "";
String pattern = "\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
}
}
py
import re
pattern = re.compile(ur'\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}')
str = u''
print(pattern.search(str))
手机(国内)
0?(13|14|15|17|18)[0-9]{9}
JAVA
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
String str = "";
String pattern = "0?(13|14|15|17|18)[0-9]{9}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
}
}
py
import re
pattern = re.compile(ur'0?(13|14|15|17|18)[0-9]{9}')
str = u''
print(pattern.search(str))
身份证号码
\d{17}[\d|x]|\d{15}
JAVA
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
String str = "";
String pattern = "\d{17}[\d|x]|\d{15}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
}
}
py
import re
pattern = re.compile(ur'\d{17}[\d|x]|\d{15}')
str = u''
print(pattern.search(str))