Javascript、C#、Java、C++、Python正则表达式示例
正则表达式是用于匹配字符串中字符组合的模式。在各程序语言中,正则表达式也是对象,它提供了功能强大、灵活而又高效的方法来处理文本。 正则表达式可以快速分析大量文本,例如:
在程序编写过程中字符处理字符串或分析文本块,正则表达式是不可缺少的工具。一个简短的正则表达式是一个字符的特殊序列,可帮助开发者匹配或查找其他字符串或字符串集。本介绍Javascript、C#、Java、Python、C++等语言的正则表达式使用,各程序语言的方法语言各异,但正则表达式在各程序语言中大部分都是相同的标准格式。
Javascript正则表达式示例:
JavaScript检索字符串中的指定字符用test方法,用法/正则规则/.test("字符串"),返回布尔值true或false,下面示例是指定abc为正则规则,特殊字符“^”和“$”为开始和结尾的边界符,比如“/^abc$/”条件为abc全字匹配,“/^abc$/.test("abcd"));”这里的意思是“abcd”包含“abc”既要匹配字符次序又要匹配字符内容。JavaScript正则表达式还可以验证 exec方法、match方法、matchAll、search、replace 替换字符方法、split 分割字符方法,这里不展开做示例演示。可以参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions(mozilla)。
console.log(/abc/.test("abcd"));//输出true
console.log(/abc/.test("1abcd"));//输出true
console.log(/abc/.test("1abd"));//输出false
console.log(/^abc/.test("abcd"));//输出true
console.log(/^abc$/.test("abcd"));//输出false
C#正则表达示例:
C#检索字符串中的中的指定字符用Regex.IsMatch()方法,返回布尔值true或false,这里需要引入“using System.Text.RegularExpressions;”,下面示例是指定abc为正则规则,特殊字符“^”和“$”为开始和结尾的边界符,比如“/^abc$/”条件为abc全字匹配,“Regex.IsMatch("abcd", @"^abc$")”这里的意思是“abcd”包含“abc”既要匹配字符次序又要匹配字符内容。除此以外C#还可以有Match(String)方法、Matches(String)方法、Replace(String, String)方法、Split(String)等,可以参考微软官方Regex 类介绍:https://docs.microsoft.com/zh-cn/dotnet/api/system.text.regularexpressions.regex?view=net-5.0。
Response.Write(Regex.IsMatch("abcd", @"abc"));//输出true
Response.Write(Regex.IsMatch("1abcd", @"abc"));//输出true
Response.Write(Regex.IsMatch("1abd", @"abc"));//输出false
Response.Write(Regex.IsMatch("abcd", @"^abc"));//输出true
Response.Write(Regex.IsMatch("abcd", @"^abc$"));//输出false
Java正则表达式示例:
Java检索字符串中的指定字符用Pattern.compile("abc").matcher("abcd").find()方法,find()返回布尔值true或false,需要引入“import java.util.regex.Matcher;”和“import java.util.regex.Pattern;”两个类。下面示例是指定“abc”为正则规则,特殊字符“^”和“$”为开始和结尾的边界符,如“Pattern.compile("^abc$").matcher("abcd").find()”这里面“abcd”包含“abc”既要匹配字符次序又要匹配字符内容。java正则详细介绍地址:https://www.oracle.com/technical-resources/articles/java/regex.html。
System.out.println(Pattern.compile("abc").matcher("abcd").find());//輸出true
System.out.println(Pattern.compile("abc").matcher("1abcd").find());//輸出true
System.out.println(Pattern.compile("abc").matcher("1abd").find());//輸出false
System.out.println(Pattern.compile("^abc").matcher("abcd").find());//輸出true
System.out.println(Pattern.compile("^abc$").matcher("abcd").find());//輸出false
C++正则表达式示例:
C++检索字符串中的指定字符采用regex_search方法,需要引入“#include <regex>”类,下面指定“遺昕”为正则规则,同样特殊字符“^”和“$”为开始和结尾的边界符,在查找匹配regex_search(a, m, b)方法之前,定义了string a=“遺昕传媒”、smatch m、regex b("^遺昕$"),此时是在"遺昕传媒"中查找全字前后顺序匹配“遺昕”,没有满足条件则返回false为0。除此以外C++正则表达式方法还有regex_match()、regex_replace(),可以参考:https://www.softwaretestinghelp.com/regex-in-cpp/#:~:text=Regular%20Expression%20%28regex%29%20In%20C%2B%2B%20A%20regular%20expression,etc.%20Regexes%20are%20also%20used%20for%20input%20validation.
std::string a = "遺昕传媒";
std::smatch m;
std::regex b("^遺昕");
std::cout << std::regex_search(a, m, b);//输出true
std::printf("\n");
std::string a1 = "遺昕传媒";
std::regex b1("^遺昕$");
std::cout << std::regex_search(a1, m, b1);//输出false
std::printf("\n");
std::string a2 = "遺昕传媒";
std::regex b2("遺昕");
std::cout << std::regex_search(a2, m, b2);//輸出true
std::printf("\n");
std::string a3 = "010-遺昕传媒";
std::regex b3("遺昕");
std::cout << std::regex_search(a3, m, b3);//輸出true
std::printf("\n");
std::string a4 = "遺010-昕传媒";
std::regex b4("遺昕");
std::cout << std::regex_search(a4, m, b4);//輸出false
std::printf("\n");
Python正则表达式示例:
python检索字符串中的指定字符用in关键字即可,它是众多程序语言中最为简洁的,如'^abc$' in "abcd"示例在字符串"abcd"中全字匹配“abc”,同样特殊字符“^”和“$”为开始和结尾的边界符。Python正则表达式方法除此还有find()、index()、sreach()方法等,详细介绍地址:https://realpython.com/regex-python/。
print('abc' in "abcd")#輸出true
print('abc' in "1abcd")#輸出true
print('abc' in "1abd")#輸出false
print('^abc' in "abcd")#輸出true
print('^abc$' in "abcd")#輸出false
通过上面JavaScript、C#、Java、C++、Python五种不同语言的示例,可以看到正则式的规则都是通用的,各自语言的语法不同方法关键都不同,表达方式也就不同,但是正则表达式的规则执行结果都是相同的。JavaScript用test方法来检测字符串是否匹配某个模式,C#是用Regex.IsMatch方法来匹配字符,Java是用Pattern.compile("abc").matcher("abcd").find()方式匹配字符,C++则是通过regex_search方法来匹配,Python通过关键字in来匹配。
下面怎则 表达式中的特殊字符含义:
字符 | 含义 |
---|---|
. | 匹配除换行符以外的任何单个字符 |
^ | ∙ 在字符串的开头锚定匹配项 ∙ 补充字符类 |
$ | 将匹配锚定在字符串的末尾 |
* | 匹配零个或多个重复 |
+ | 匹配一次或多次重复 |
? | ∙匹配零个或一个重复 ∙的指定非贪婪版本*,+和? ∙推出一个超前或向后断言 ∙创建一个名为组 |
{} | 匹配明确指定的重复次数 |
\ | ∙ 转义具有特殊含义的元字符 ∙ 引入特殊字符类 ∙ 引入分组反向引用 |
[] | 指定字符类 |
| | 指定交替 |
() | 创建一个组 |
: # = ! |
指定专门小组 |
<> | 创建命名组 |
元字符 | 含义 |
---|---|
\d | 匹配任何数字,相当于 [0-9] |
\D | 匹配任何不是数字的字符,相当于 [^0-9] |
\w | 匹配任何字母数字字符(加下划线),相当于 [A-Za-z_0-9] |
\W | 匹配任何非字母数字字符,除了 [^A-Za-z_0-9] |
\s | 匹配任何空白字符:空格、制表符、换行符和 Unicode 空格 |
\S | 匹配任何不是空格的字符 |
\0 | 匹配空值 |
\n | 匹配换行符 |
\t | 匹配制表符 |
\uXXXX | 匹配具有代码 XXXX的unicode字符(需要u标志) .匹配任何不是换行符的字符(例如\n) |
[^] | 匹配任何字符,包括换行符。它对多行字符串很有用 |
本文介绍各语言的正则表达式用法,没有没有展开其它正则表达式的其它方法的用法,通过5示例演示各正则表示初步入门,从这里我们可以看出正则表达式各语言都是通用的标准规则,由于各语言语法规则不同表达方式不同,但执行同一个正则式的结果是相同的。其中C#和C++程序都是在Visual studio中完成,Python和Java程序均是在Eclipse IDE中完成,这两者需要配置java虚拟环境,python则需要安装python解释器。
本文示例列表: