正则表达式在编程中的应用
正则表达式(也称为匹配表达式)的Regex工作原理是提供必须匹配的字符。正则表达式通常用于处理大量数据。
处理如此庞大的数据量时,我们不能一个接一个地更新或修改数据,因为这会占用我们太多时间,所以我们习惯Regex将它们分组在一起进行更新。
什么是正则表达式?
正则表达式是一串字符,用于指定搜索模式。正则表达式也称为patterns匹配器,用于匹配字符串中的字符组合。通常,字符串搜索算法会使用此类模式对字符串进行匹配find或操作,或者用于输入验证。find and replace
例如,像[a-zA-Z]这样的简单表达式会匹配所有字母。任何只包含简单字母且不带任何音调符号的单词都属于这一类,例如 code、table、Markdown 等等。
正则表达式在编程中的一些主要用途
如前所述,正则表达式对程序员来说非常有用,可以用于各种任务。
-
用于实现
find and replace识别字符组或字符序列并将其替换为表达式指定的其他内容的功能。 -
例如
search operations,能够识别整个文档中的单个字符串。 -
例如
Input Validation,密码、电子邮件地址和其他可能需要特殊字符的输入类型。
正则表达式中的元字符
在我们深入探讨如何编写Regex和解释各种模式之前,我们必须首先了解创建此表达式所涉及的元字符。
Ametacharacter是一个对计算机程序(例如 shell 解释器或正则表达式 (regex) 引擎)具有特殊含义的字符。
[ ] - + * ? ^ $ ( ) { } | . \
以上每个元字符在Regex启用环境下都有完全不同的含义。
方括号 [ ]
用于将相似的数据组合在一起,创建一个范围。例如,[0-9]“simple”表示从 0 到 9 的所有数字。
连字符 -
这个简单的符号表示to范围或区间。
加号 +
表示匹配前面一个或多个字符或字符组。
例如,一个简单的表达式` \ /ab+c/n ...abcabcabbcabbbc
星号 *
表示匹配零个或多个前面的字符或字符组。
例如,一个简单的表达式` \ /ab*c/n ...abcacabbcabbbc
问号?
它匹配零或前面的某个字符或字符组。
例如,一个简单的表达式“ /ab?c/words”表示从该表达式得到的单词必须以“.”开头a,包含零个或一个“ .” b,并且必须始终以“ .”结尾c。只有两种可接受的输出结果:` words`ac和`words` abc。
插入符号 ^
有两个不同的用途。它是一个特殊字符,表示“行的开始” ,在方括号 [] 内,它也是一个“非”
运算符。 请看以下三个示例:
/([^aeiou])//^([aeiou])//^([^aeiou])/
第一个例子匹配所有非元音字符。
第二个例子匹配行首的元音字符。
第三个例子匹配行首的所有非元音字符。
美元符号 $
用于匹配行尾。例如,/$([aeiou])/$$ 匹配行尾的元音字母。
括号 ()
正则表达式中的括号通常表示“捕获组”,或要存储以供以后引用的字符串子集。
例如,/^([aeiou])([0-9])/
此示例匹配以单个元音开头的字符串(第一个捕获组是单个元音),后跟任意单个数字(第二个捕获组是任意数字)。
花括号 {}
用于匹配特定范围。当您想精确指定运算符或子表达式在源字符串中必须匹配的次数时,可以使用花括号。花括号及其内容被称为区间表达式。例如,`{}`{n}表示前面的元素或子表达式必须恰好出现 n 次。
竖线符号 |
两个用竖线符号分隔的正则表达式可以匹配第一个表达式或第二个表达式中的任何一个。
例如,一个简单的表达式“ a”/(a|b)*c/表示由此表达式得到的单词必须以“a” a、“b”b或“n”开头,并且必须始终以“a”结尾c。一些可接受的输出包括“a” c、ac“b bc”、“c”等等。
点号。
点号运算符可以匹配任何字符。它有很多动态用途。
例如,该表达式/^([0-9])(.)/匹配以数字开头,后跟任意字符的字符串。
*反冲符*
反冲符用于转义元字符。“转义元字符”是指使元字符失效(剥夺其特殊含义),使其具有字面含义。
例如,点号(".") 可以作为元字符代表任何单个字符。因此,当我们有一个表达式 `".")` 时ab.,它匹配一个点号a,b后面跟着一个任意字符。但是,当它被转义为 `".")` 时,它就ab\.仅仅表示 `".")` 。ab.
方法和类中的正则表达式
现在让我们把学到的所有知识应用到下面的例子中。
示例 1:
本示例中的表达式匹配字符串中的两个不同的单词,如下str代码片段所示。程序将返回肯定提示信息。
var regex = /li[kv]e/;
var str = "They like the live show.";
// Test the string against the regular expression
if(regex.test(str)) {
alert("Match found!");
} else {
alert("Match not found.");
}
输出
Match found!
例 2
在下一个示例中,g添加了一个 a 来记录下面给出的字符串中序列的每次单词出现情况。
var regex = /[rt]?each/g;
var str = "To teach means to reach as many kids, each also reaching others";
var matches = str.match(regex);
if(regex.exec(str)) {
alert(matches.length + " Matches found!");
} else {
alert("Match not found.");
}
本例的输出结果为teach, reach, each,reach根据之前的解释,这意味着它们的数量为 4。您可以尝试运行以下代码片段进行确认。
输出
4 Matches found!
角色职业
字符类是正则表达式中仅次于字面匹配的最基本概念。它使一小段字符序列匹配一大段字符。例如,`\n`[A-Z]可以表示为 `\n` \u,它\d可以表示任何数字。
以下是一些角色类型:
\d表示数字。也可以写成 [0-9]。\D表示非数字。它也可以写成 [^0-9]。\w表示字母数字字符和下划线。它也可以写成 [A-Za-z0-9_]。\W表示非单词字符。它也可以写成 [^A-Za-z0-9_].\s表示空白字符。也可以写成 [ \t\r\n\v\f]。\S表示非空白字符。它也可以写成 [^ \t\r\n\v\f]。\a代表字母字符。也可以写成 [A-Za-z]。\l表示小写字符。也可以写成 [az]。\u表示大写字母。也可以写成 [AZ]。\x表示十六进制数字。它也可以写成 [A-Fa-f0-9]。\b仅表示边界。\g这仅仅代表全局搜索,意味着它会匹配所有匹配项。
请注意,这些字符类在某些编程语言或测试环境中可能有所不同。
编程中的角色类
我们再来看一些涉及角色类和其他字面量的例子。
示例 3
:以下表达式将字符串拆分成一个字符串数组。根据定义Regex,拆分条件是空格。我已在控制台输出结果,以便您查看字符串列表。
var regex = /[\s,]+/;
var str = "My house is painted white, purple and blue";
var parts = str.split(regex);
// Loop through parts array and display substrings
for(var part of parts){
console.log(part)
document.write("<p>" + part + "</p>");
}
例 4
在下一个示例中,我们将变量中的所有数字替换str为连字符。
var regex = /\d/g;
var replacement = "-";
var str = "There 3 kids, 4 adults and 98 animals";
// Replace digits with -
var matches = str.replace(regex, replacement);
console.log(matches)
例 5
在第五个例子中,我们也进行了替换,但将所有小写元音字母替换为星号。
var re = /[aeiou]/g;
var replace = "*";
var str2 = "Every one of them knows the answer to No 2";
// Replace lowercase vowels with *
var matches2 = str2.replace(re, replace);
console.log(matches2)
您也可以在空闲时间重新测试上面给出的代码片段,并尝试新的表达式。和往常一样,练习越多,成为专家的机会就越大。
结论
正则表达式可以应用于计算机编程和数据管理的各个方面。它可以用来执行 SQL 或数据库操作。Regex总有很多场景可以尝试。希望这篇文章对您有所帮助。但这还不够,练习、练习、再练习才是王道。