第一个字符为中文或英文字母,只包含中文、字母、数字、下划线、连字符"-" 的字符串
无空格,
"^"
表示字符串开头,
"$"
表示字符串结尾,"*"表示前面的子表达式"[A-Za-z\u4e00-\u9fa50-9_\-]"字母、中文、数字、下划线、连字符"-"
重复0次或更多次
^[A-Za-z\u4e00-\u9fa5][A-Za-z\u4e00-\u9fa50-9_\-]*$
Java测试代码
public class RegexTest {
@Test
public void testComplex(){
String pattern = "^[A-Za-z\\u4e00-\\u9fa5][A-Za-z\\u4e00-\\u9fa50-9_\\-]*$";
Pattern r = Pattern.compile(pattern);
List<String> list = Stream.of(
" ",
"_",
"-",
"好",
"T",
"_好",
"好_",
"T_",
"好-T",
"T_好",
"T_好 ",
"T _好"
).filter(s -> r.matcher(s).matches())
.collect(Collectors.toList());
list.forEach(System.out::println);
测试结果如下:
{0, 31}表示前面的子表达式重复0次或31次,则字符串length可以是1~32
^[A-Za-z\u4e00-\u9fa5][A-Za-z\u4e00-\u9fa50-9_\-]{0,31}$
匹配不包含任意字母的长度大于0的字符串
^[^a-zA-Z]+$
匹配下列文本中以"What exactly"开头的所有行
(What exactly){1}[a-z ]+
匹配不以"abc"开头的小写字符串
^(?!abc)[a-z]*$
"^(abc)[a-z]*$"是匹配的以abc开头的字符串.
正则表达式中"[]"与"()"的区别
比如"[abc]"时a,b,c其中之一,"[0-9]"指的是其中一个0-9的数字, (abc)"是abc连在一起的字符串;
用Java实现的例子:
* 这里和下面的Pattern主要是为了区分正则表达式中"[]"与“()"的区别;
* "[abc]"时a,b,c其中之一,"(abc)"是abc连在一起的字符串
* 匹配"abc"开头的纯字母字符串(无空格等), 字符串长度为3~30
public final Pattern ABC_MATCH = Pattern.compile("^(abc)[\\w]{0,27}$");
* 匹配'a'或'b'或'c'开头的纯字母字符串(无空格等),字符长度1~30
public final Pattern CONTAINS_A_OR_B_OR_C = Pattern.compile("^[abc][\\w]{0,29}$");
* 匹配"abc"开头的纯字母字符串(无空格等), 字符串长度为3~30
@Test
public
void
matchTheStringBeginningWithAbc(){
Stream.of(
"", "cba", "abc", "abcdddd", "abcabc", "abcccccccccccccccccccccccccccccccc"
)
.filter(ABC_MATCH.asPredicate()).forEach(System.out::println);
//
abc
//
abcdddd
//
abcabc
* 匹配'a'或'b'或'c'开头的纯字母字符串(无空格等),字符长度1~30
@Test
public
void
containsLetter(){
Stream.of(
"fabc", "c", "bdd", "dabc", "aaaaaa", "abcccccccccccccccccccccccccccccccc"
)
.filter(CONTAINS_A_OR_B_OR_C.asPredicate()).forEach(System.out::println);
//
bdd
//
aaaaaa
匹配数字 如果这个数字是一位数,那么它只能是1~9;如果是两位数它可以是01~99,如果是三位数可以是001~999
合法:1, 01, 001, 900, 230, 30, 020, 300;
不合法:00,000,非数字.
^([1-9]|[0][1-9]|[1-9][0-9]|[0-9][0-9][1-9]|[0-9][1-9][0]|[1-9][0-9][0])$
匹配一个字符串:以"abc"开始,结束同样以"abc",中间必须要有1~10位数字
比如:"abc13123123abc"
这个正则表达式中的"
\1
"代表此处的匹配内容和前面的
第一个小括号"(abc)
"一样,"\2"则代表第二个小括号匹配的内容,
以此类推
,"\3","\4","\5"......
^(abc)\d{1,10}\1$
在线正则表达式测试
https://regexr.com/
https://www.sojson.com/regex/generate
https://www.jianshu.com/p/a2164e370e29