先来个.*?的解释吧
. : 单个任意字符
* : 重复多次、贪婪匹配。注意*在正则中不是任意字符,而是一个限定限定出现的次数
? : 出现1次或者0次、非贪婪匹配
匹配只能输入英文数字下划线,并且不能数字开头
代码如下:
if (Regex.IsMatch(username, @"^[a-zA-Z_][A-Za-z0-9_]*$")) { return Json("设置合法"); } else { return Json("设置不合法"); }
提取一个字符串的中文
string content = "SS上海xx北京"; List<string> chs = new List<string>(); Regex reg = new Regex("[\u4e00-\u9fa5]+"); foreach (Match v in reg.Matches(content)) chs.Add(v.Value);
效果如下:
正则表达式拆分字符串
string content = "SS上海xx上海"; string[] sArray = Regex.Split(content, "上海", RegexOptions.IgnoreCase);
这个很简单,效果如下:
他可以根据一个字符串去拆分,后面的参数是忽略大小写
例子2:根据一个标签拆分字符串
拆分"aa<em>哈哈</em>bb<em>嘻嘻</em>cc"成 aa,bb,cc
string[] str = Regex.Split(title, @"<em>.*?</em>");
拆分成aa,<em>哈哈</em>,bb,<em>嘻嘻</em,cc
string[] str2 = Regex.Split(title,"(<em>.*?</em>)");
效果如下:
其实很简单就是正则里边加一个()括起来就能取到它本身了
例子3:根据中文拆分字符串
string str = "aa哈哈哈哈bb嘻嘻嘻嘻ccc"; string[] str2 = Regex.Split(str, "([\u4e00-\u9fa5]+)");
效果如下:
正则表达式替换字符串
把重庆替换成<font>重庆</font>
string content = "SS重庆xx"; content = Regex.Replace(content, "重庆", "<font>重庆</font>", RegexOptions.IgnoreCase);
统一把- **xxx**替换成### xxx
代码如下:
Regex reg = new Regex(@"- \*\*(.*?)\*\*", RegexOptions.IgnoreCase); MatchCollection matchs = reg.Matches(tempContent); foreach (Match match in matchs) { if (match.Success) { if (match.Groups.Count > 1) { string beforeValue = match.Groups[0].Value; string value = match.Groups[1].Value; tempContent = tempContent.Replace(beforeValue, "### " + value); //tempContent = Regex.Replace(tempContent, beforeValue, "### " + value, RegexOptions.IgnoreCase); //tempContent = Regex.Replace(tempContent, @"- \*\*"+ value + @"\*\*", "### "+ value, RegexOptions.IgnoreCase); } } }
把 from [XX] as [y] 替换为 from [XX] as [y] WITH (NOLOCK)。也就是需要在后面加上WITH (NOLOCK) 其中[XX]与[y]可以是任意英文与数字与下划线的组合名称
代码如下
string input = "SELECT * from [tableName] as [alias]"; string pattern = @"from\s+\[[a-zA-Z0-9_]+\]\s+as\s+\[[a-zA-Z0-9]+\]"; string replacement = "$& WITH (NOLOCK)"; string output = Regex.Replace(input, pattern, replacement);
其中,input 是需要替换的字符串;pattern 是匹配模式,使用了正则表达式来匹配符合要求的子字符串;replacement 是替换模板,使用 $& 表示将匹配到的子字符串保留,并加上 WITH (NOLOCK);最后调用 Regex.Replace() 方法完成替换操作,将结果保存在 output 变量中。
刚刚的问题除了支持把 from [XX] as [y] 替换为 from [XX] as [y] WITH (NOLOCK)还能支持把JOIN [XX] as [y] 替换为 from [XX] as [y] WITH (NOLOCK)
以下是可以同时匹配 "from [XX] as [y]" 和 "JOIN [XX] as [y]" 并替换为 "from [XX] as [y] WITH (NOLOCK)" 的 C# 正则表达式代码:
string input = "SELECT * FROM [table1] JOIN [table2] AS [t2] WHERE [t2].[column1] > 10"; string pattern = @"(?:FROM|JOIN)\s+\[[a-zA-Z0-9_]+\]\s+AS\s+\[[a-zA-Z0-9]+\]"; string replacement = "$& WITH (NOLOCK)"; string output = Regex.Replace(input, pattern, replacement);
其中,(?:FROM|JOIN) 表示匹配 "FROM" 或 "JOIN",而 ?: 则表示不捕获该组,只用于分组,以便后面的 $& 可以正确地取到要替换的子字符串。其余部分与之前的正则表达式类似,使用了 \[[a-zA-Z0-9]+\] 来匹配方括号内的任意英文字母和数字的组合名称。
请注意,在实际应用中,这种替换方式可能会带来一些风险,因为使用 WITH (NOLOCK) 可能会造成数据不一致或其他问题。建议在使用时谨慎考虑并进行充分测试。
正则表达式匹配特殊字符
加一个转义就行了。比如要匹配- **xxxx**这种格式的内容
Regex.Replace(tempContent, @"- \*\*.*?\*\*", "### 哈哈哈", RegexOptions.IgnoreCase);
注意前面要加一个@
正则表达式提取字符串
例如有一个字符串:"使用ef实现多对多关系配置"
我想使用ef作为一个关键字进行提取,提取ef的左边,ef本身,ef的右边。
我们就可以写一个正则表达式来提取: Regex reg = new Regex("^(.*)(ef)(.*)$", RegexOptions.IgnoreCase);
正则表达式中用()将要提取的内容括起来,然后就可以通过Match的Groups属性来得到所有的提取元素,注意Groups的序号是从1开始的,0有特殊含义
string content = "使用ef实现多对多关系配置"; string query = "EF";//正则表达式可以动态的来 List<string> search = new List<string>(); Regex reg = new Regex("^(.*)(" + query + ")(.*)$", RegexOptions.IgnoreCase); Match match = reg.Match(content); if (match.Success) { for (int i = 1; i < match.Groups.Count; i++) { search.Add(match.Groups[i].Value); } }
效果如下:
使用js编写一个正则表达式可以提取出来*.png的内容
问题描述:使用js编写一个正则表达式可以提取出来*.png的内容,*表示任意字符,比如给定一个字符串"iconfont iconrole rolemanger.png",希望能够得到rolemanger.png
示例代码:
const filename = "iconfont iconrole rolemanger.png"; const regex = /[\w-]+\.(png)/; const result = regex.exec(filename); if (result !== null) { console.log(result[0]); // 输出 rolemanger.png }
正则表达式写起来很简单就是头冷
欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739