regex 正则表达式
实际中遇到过的
(?<!\.)\b\w+(Date)(?=[;(])
匹配:"Date" 在这些字符串里 "somewords someDate;", " someDate;" "someDate(", "someDate;"
不匹配: " Date(", " Date;", "Date;", " Date", "someDate", "Java.localDate;"
解释:
(?<!\.)
: 负向后行断言(negative lookbehind assertion),确保匹配的字符串前面不是一个句点(.)- (Date): 捕获组, 匹配字符串 Date 并将其捕获为一个组
(?=[;(])
: 前瞻断言 (lookahead),表示 "Date" 之后必须紧跟一个分号 ";" 或左括号 "("
我之前一直搞不定如何满足不匹配 "Java.localDate;" 这个字符串里的 "Date",我在stackoverflow上发了篇帖子问这个问题。很快得到了高手的帮助,给出了以上的答案
常用正则表达式
基础模式
'.' 通配符。匹配除换行符外的任何单个字符
c.t
匹配: cat, cot, cut, c3t
不匹配: ct, caat
解释:在这个例子中,它匹配 'c' 和 't' 之间的任何一个字符。但不匹配 "ct"(因为中间没有字符)或 "cast"(因为有两个字符)。
'*' 零或多次。'*' 前面的字符可以出现零次或多次
ca*t
匹配: ct, cat, caat, caaat
不匹配:: cot, cut, c3t
解释:'*' 前面的字符 'a' 可以出现零次或多次。它不匹配 "cot" 或 "c3t",因为 'c' 和 't' 中间的字符不是 'a'。
'.' 和 '*' 组合使用
c.*t
匹配: ct, cat, cot, cut, c@t, c t, caaat
不匹配: ca, at, tc
解释:'.*' 组合可以匹配任意数量的任意字符。在这个例子中,模式要求字符串以 'c' 开始,以 't' 结束,中间可以是任何内容(包括没有内容)。
'?' 零次或一次。'?' 前面的字符可以出现零次或一次
ca?t
匹配: ct, cat
不匹配: caat, cot, cut, c3t
'+' 一次或多次, '+' 前面的字符必须出现一次或多次
ca+t
匹配: cat, caat, caaat
不匹配: ct, cot, cut
解释:
在这个例子中,'a' 必须至少出现一次。这就是为什么它匹配 "cat"(一个 'a')、"caat"(两个 'a')和 "caaat"(三个 'a')。但它不匹配 "ct"(没有 'a')、"cot" 或 "cut"(因为中间的字符不是 'a')。
'\w' 单词字符,包括字母、数字和下划线
c\wt
匹配: cat, cot, cut
不匹配: ct, c@t, c t
解释:在这个例子中:不匹配 "ct",因为缺少中间的字符。不匹配 "c@t" 或 "c t",因为 @ 和空格不是单词字符。
'\d' 数字
c\dt
匹配: c1t, c2t, c3t
不匹配: cat, cot, cut
'^' 字符串始
^cat
匹配: cat in "cat is cute"
不匹配: cat in "the cat is cute"
'$' 字符串尾
cat$
匹配: cat in "look at the cat"
不匹配: cat in "cat is cute"
'()' 捕获组
(ca)+t
匹配: cat, cacat, cacacat
不匹配: ct, cot, cut
解释:(ca)+ 匹配一个或多个 "ca" 重复,后面跟着 "t"。
'{n}' 精确重复, 前面的模式必须精确重复n次
(c.t){3}
匹配: catcotcut, cutcatcot, cotcutcat, catcatcat, cotcotcot
不匹配: catcot
{n,m}' 前面的模式重复n~m次
交替
cat|cot|cut
c[aou]t
匹配: cat, cot, cut
不匹配: ct, caat, cooot