正则表达式(Regular Expression)是一种用来匹配和操作文本模式的工具。它由一组特殊的字符和规则组成,可以用来搜索、替换、验证和过滤文本。正则表达式语法是用于编写正则表达式的规则和指令。
以下是一些常见的正则表达式语法:
元字符:
.:匹配任意字符(除了换行符)。
^:匹配字符串的开头。
$:匹配字符串的结尾。
*:匹配前面的子表达式零次或多次。
+:匹配前面的子表达式一次或多次。
?:匹配前面的子表达式零次或一次。
{n}:匹配前面的子表达式恰好n次。
{n,}:匹配前面的子表达式至少n次。
{n,m}:匹配前面的子表达式至少n次,但不超过m次。
字符类:
[abc]:匹配方括号内的任意字符(在本例中为a、b或c)。
[^abc]:匹配除了方括号内的任意字符。
转义特殊字符:
\d:匹配任何十进制数字。
\D:匹配任何非数字字符。
\s:匹配任何空白字符。
\S:匹配任何非空白字符。
\w:匹配任何字母数字字符。
\W:匹配任何非字母数字字符。
锚点:
\b:单词边界。
\B:非单词边界。
选择符:
|:表示选择,例如:(cat|dog)将匹配“cat”或“dog”。
注释:
(?:pattern) :非捕获分组,用于分组,但不捕获匹配项。
贪婪模式和懒惰模式:
默认情况下,正则表达式是贪婪的,即尽可能多地匹配。要修改为懒惰模式,可以在元字符后面添加一个问号。例如,“o+?” 将匹配尽可能少的“o”,而“o+?” 将匹配尽可能多的“o”。
反向字符类:
[^x]:匹配除了x以外的任何字符。
[^aeiou]:匹配除了元音字母a、e、i、o、u以外的任何字符。
捕获组:
(pattern) :捕获组,用于捕获匹配的文本,可以重复使用或命名。
命名捕获组:
(?<name>pattern) :命名捕获组,用于给捕获的文本命名,以便在后面的正则表达式中引用。
后向引用:
\n :引用第n个捕获组(\1是第一个,以此类推)。例如,“\1”将引用第一个捕获组,“\2”将引用第二个捕获组。
负向后向引用:
(?!pattern) :负向后向引用,表示后面的文本不应该是这样。例如,“foo(?!bar)”将匹配“foobar”中的“foo”,但不匹配“foobart”。
前瞻断言:
(?=pattern) :前瞻断言,表示前面的文本应该是这样。例如,“.(?=go)”将匹配“everythinggoes”中的“e”,但不匹配“going”。