### 正则表达式语法一览表详解 #### 一、锚点(Anchors) - **^**:匹配字符串的开头。 - **\A**:同样用于匹配字符串的开头,但与^的区别在于,\A不会在多行模式下匹配每一行的开头,而^可以。 - **$**:匹配字符串的结尾。 - **\Z**:同样用于匹配字符串的结尾,区别在于\Z只匹配整个字符串的结尾或换行符前的位置,而$还会匹配每一行的结尾。 - **\b**:表示单词边界,即一个单词字符与非单词字符之间的位置。 - **\B**:表示非单词边界,即两个单词字符相邻或两个非单词字符相邻的位置。 - **\<**:表示单词的开头。 - **\>**:表示单词的结尾。 #### 二、字符类(Character Classes) - **\c**:控制字符,需要后跟一个大写字母来指定具体的控制字符。 - **\s**:表示空白字符,包括空格、制表符等。 - **\S**:表示非空白字符。 - **\d**:表示数字字符,相当于[0-9]。 - **\D**:表示非数字字符。 - **\w**:表示单词字符,相当于[a-zA-Z0-9_]。 - **\W**:表示非单词字符。 - **\x**:十六进制数字,用于表示特定的字符。 - **\O**:八进制数字,用于表示特定的字符。 - **POSIX**:这些字符类提供了更多的灵活性,可以根据POSIX字符类别定义更复杂的字符集。 - **[:upper:]**:表示所有的大写字母。 - **[:lower:]**:表示所有的小写字母。 - **[:alpha:]**:表示所有的字母,大小写均包含。 - **[:alnum:]**:表示所有字母和数字。 - **[:digit:]**:表示所有数字,等同于\d。 - **[:xdigit:]**:表示十六进制数字。 - **[:punct:]**:表示标点符号。 - **[:blank:]**:表示空格和制表符。 - **[:space:]**:表示空白字符,与\s相似。 - **[:cntrl:]**:表示控制字符。 - **[:graph:]**:表示可打印的字符,不包括空格。 - **[:print:]**:表示可打印的字符,包括空格。 #### 三、断言(Assertions) - **?=**:正向先行断言,用于测试当前位置之后的字符串是否匹配指定的模式。 - **?!**:负向先行断言,用于测试当前位置之后的字符串是否不匹配指定的模式。 - **?<=**:正向后置断言,用于测试当前位置之前的字符串是否匹配指定的模式。 - **?!= 或 ?<!**:负向后置断言,用于测试当前位置之前的字符串是否不匹配指定的模式。 - **?>**:一旦仅捕获,用于指定一个子表达式只被捕获一次。 #### 四、条件(Conditions) - **()?**:用于指定如果满足某种条件,则执行相应的操作。 - **()?()|**:用于指定如果满足某种条件,则执行一种操作;如果不满足,则执行另一种操作。 - **?#**:注释,允许在正则表达式中添加注释,被忽略。 #### 五、量词(Quantifiers) - **\***:表示前面的字符可以出现零次或多次。 - **\+**:表示前面的字符至少出现一次。 - **\?**:表示前面的字符可以出现零次或一次。 - **{3}**:表示前面的字符必须恰好出现三次。 - **{3,}**:表示前面的字符至少出现三次。 - **{3,5}**:表示前面的字符出现次数为3到5次。 #### 六、量词修饰符(Quantifier Modifiers) - **x?**:表示前面的量词是“懒惰”的,即尽可能少地匹配字符。 #### 七、转义字符(Escape Character) - **\**:用于转义特殊字符,使其被视为普通字符。 #### 八、元字符(Metacharacters) - **^**:用于字符集时,表示不包含后面的字符。 - **.**:表示任意单个字符(除了换行符)。 - **$**:用于匹配字符串的结尾。 - **[*]**:表示零次或多次重复前面的字符。 - **( )**:用于分组。 - **+**:表示一次或多次重复前面的字符。 - **|**:表示或,用于选择多个模式中的一个。 - **?**:表示零次或一次重复前面的字符。 - **< >**:用于标记单词边界。 #### 九、特殊字符(Special Characters) - **\n**:新行。 - **\r**:回车。 - **\t**:制表符。 - **\v**:垂直制表符。 - **\f**:换页符。 - **\xxx**:八进制形式的字符。 - **\xhh**:十六进制形式的字符。 #### 十、分组与范围(Groups and Ranges) - **(...)**:表示分组。 - **(?:...)**:表示被动分组,不进行捕获。 - **[abc]**:表示范围,即匹配a、b、c中的任意一个。 - **[^abc]**:表示排除,即匹配除a、b、c之外的任意字符。 - **[a-q]**:表示范围内的字符,即a到q之间的任意小写字母。 - **[A-Q]**:表示范围内的字符,即A到Q之间的任意大写字母。 - **[0-7]**:表示范围内的数字,即0到7之间的任意数字。 #### 十一、模式修饰符(Pattern Modifiers) - **g**:全局匹配,用于匹配所有符合条件的位置。 - **i**:不区分大小写。 - **m**:多行模式。 - **s**:单行模式,此时点号"."也可以匹配换行符。 - **T**:将字符串视为单行。 - **x**:允许在模式中使用空白字符和注释。 - **e**:用于替换字符串中的变量。 - **U**:懒惰模式,使量词尽可能少地匹配字符。 #### 十二、字符串替换(Backreferences) - **$n**:第n个非被动组的匹配结果。 - **$2"xyz"**:示例中表示在正则表达式的开头匹配了"abc"之后的"xyz"。 - **$`**:匹配前的字符串部分。 - **$'**:匹配后的字符串部分。 - **$+**:最后一次匹配的结果。 - **$&**:整个匹配的结果。 #### 十三、示例模式(Sample Patterns) - **([A-Za-z0-9-]+)**:匹配字母、数字和短划线。 - **(\d{1,2}/\d{1,2}/\d{4})**:匹配日期格式,例如21/3/2006。 - **([^\s]+(?=\.(jpg|gif|png))\.\2)**:匹配.jpg、.gif或.png图片文件。 - **(^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^50$)**:匹配任何数字,例如1到50之间的数字。
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助