如何编写正则表达式?
正则表达式 (regex) 是定义搜索模式的字符序列。以下是编写正则表达式的方法:
- 首先了解正则表达式中使用的特殊字符,例如"."、"*"、"+"、"?"等。
- 选择支持正则表达式的编程语言或工具,例如 Python、Perl 或 grep。
- 使用特殊字符和文字字符编写模式。
- 使用适当的函数或方法来搜索字符串中的模式。
例子:
- 要匹配文字字符序列,只需将这些字符写入模式即可。
- 要匹配一组可能性中的单个字符,请使用方括号,例如 [0123456789] 匹配任何数字。
- 要匹配前面的表达式零次或多次出现,请使用星号 (*)。
- 要匹配前面出现的一个或多个表达式,请使用加号 (+)。
- 值得注意的是,正则表达式可能很复杂且难以阅读,因此建议使用正则表达式测试器等工具来调试和优化您的模式。
正则表达式(有时称为有理表达式)是定义搜索模式的字符序列,主要用于与字符串的模式匹配或字符串匹配,即"查找和替换"之类的操作。正则表达式是一种将模式与字符序列进行匹配的通用方法。它用于 C++、Java 和 Python 等每种编程语言。
什么是正则表达式以及它为何如此重要?
正则表达式在Google Analytics中用于URL 匹配,以支持 Sublime、Notepad++、Brackets、Google Docs 和 Microsoft Word 等大多数流行编辑器中的搜索和替换。
ini
示例:电子邮件地址的正则表达式:
^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}) $
上面的正则表达式可用于检查给定的字符集是否是电子邮件地址。
正则表达式怎么写?
有一些用于编写正则表达式的元素,如下所述:
1. 重复器(*、+ 和 { })
这些符号充当重复器,并告诉计算机前一个字符将使用多次。
2. 星号(*)
它告诉计算机匹配前面的字符(或字符集)0 次或多次(最多无限次)。
r
示例:正则表达式 ab*c 将给出 ac、abc、abbc、abbbc...等等
3. 加号 (+)
它告诉计算机重复前面的字符(或字符集)至少一次或多次(最多无限次)。
r
示例:正则表达式 ab+c 将给出 abc, abbc,
abbc,......等等。
4. 大括号 { ... }
它告诉计算机重复前面的字符(或字符集)的次数与括号内的值相同。
arduino
示例: {2} 表示前面的字符要重复 2
times, {min,} 表示前面的字符匹配 min 或更多
次。{min,max} 表示前面的字符重复出现在
最少最小次数和最多最大次数。
5. 通配符 (.)
点符号可以代替任何其他符号,这就是为什么它被称为通配符。
例子 :
正则表达式 .* 将告诉计算机任何字符
可以使用任意多次。
6. 可选字符(?)
该符号告诉计算机前面的字符可能出现也可能不出现在要匹配的字符串中。
arduino
例子 :
我们可以将文档文件的格式写为"docx?"
这 '?' 告诉计算机 x 可能是也可能不是
存在于文件格式的名称中。
7. 插入符号(^) (设置匹配位置)
插入符号告诉计算机匹配必须从字符串或行的开头开始。
示例: ^\d{3} 将与"901-333-"中的"901"等模式匹配。
8. 美元($)符号
它告诉计算机匹配必须出现在字符串的末尾或行或字符串末尾的 \n 之前。
ruby
示例: -\d{3}$ 将与"-901-333"中的"-333"等模式匹配。
9. 字符类
字符类与一组字符中的任何一个匹配。它用于匹配语言的最基本元素,如字母、数字、空格、符号等。
\s :匹配任何空白字符,例如空格和制表符。 \S :匹配任何非空白字符。 \d :匹配任何数字字符。 **\D:**匹配任何非数字字符。 \w :匹配任何单词字符(基本上是字母数字) \W :匹配任何非单词字符。 \b:匹配任何单词边界(包括空格、破折号、逗号、分号等。 **[set_of_characters]:**匹配 set_of_characters 中的任何单个字符。默认情况下,匹配区分大小写。
css
示例: [abc] 将匹配任何字符串中的字符 a、b 和 c。
**10. [^字符集]**否定:
匹配不在 set_of_characters 中的任何单个字符。默认情况下,匹配区分大小写。
css
示例: [^abc] 将匹配除 a,b,c 之外的任何字符。
11. [首尾] 字符范围:
匹配从第一个到最后一个范围内的任何单个字符。
css
示例: [a-zA-z] 将匹配从 a 到 z 或 A 到 Z 的任何字符。
12. 转义符号 ( \ )
如果你想匹配实际的"+","." 等字符,在该字符前添加反斜杠(\)。这将告诉计算机将以下字符视为搜索字符并将其视为匹配模式。
markdown
示例: \d+[\+-x\*]\d+ 将匹配"2+2"等模式
和"(2+2) * 3*9"中的"3*9"。
13. 对字符进行分组 ( )
正则表达式的一组不同符号可以组合在一起作为一个单元并充当一个块,为此,您需要将正则表达式括在括号( )中。
css
示例: ([AZ]\w+) 包含正则表达式的两个不同元素
表达式组合在一起。该表达式将匹配任何模式
包含大写字母后跟任何字符。
14. 竖线 ( | )
匹配由竖线 (|) 字符分隔的任一元素。
kotlin
示例: th(e|is|at) 将匹配单词 - the、this 和 that。
15.\数字
*反向引用:*允许随后在同一正则表达式中识别先前匹配的子表达式(捕获或括在圆括号内的表达式)。\n 表示第 n 个括号内的组将在当前位置重复。
css
示例: ([az])\1 将匹配 Geek 中的"ee",因为该字符
第二个位置的字符与匹配的位置 1 的字符相同。
16.注释(?#注释)
内联注释:注释以第一个右括号结束。
kotlin
示例 : \bA(?#This is an inline comment)\w+\b
17. # [到行尾]
*X模式评论。*注释从未转义的 # 开始,一直到行尾。
示例 :
css
(?x)\bA\w+\b#匹配以 A 开头的单词