正则表达式是最为高效的信息查询公式,关于它的概念不再细说,学习一样东西从简单的实例开始是最好不过的,以下收集各种实用的正则表达式,为了统一,以下内容中的“内容”为源字符串,“正则”为正则表达式,“结果”就是查询结果,将不断更新。
1.正则 获取两个字符串之间的内容(不包换界定字符串)
内容:找到相关结果146个 正则: (?<=结果)\d*(?=个) 结果:146
@获取网页标题内容: (?<=\<title\>).* ?(?=\</title\>) (注:红色是边界,\<title\> 代表查找<title>,就是说(?<=左边界)
(?<=title\>).*(?=</title)
2.从网址中提取主域名:
^.+\.(com.cn|com|net.cn|net|org.cn|org|gov.cn|gov|cn|mobi|me|info|name|biz|cc|tv|asia|hk|网络|公司|中国)\/
3.懒惰匹配
表达式1:(?<=links \().*?(?=\)) 与表达式2: (?<=links \().*(?=\)) (注:注意红色部分的区别)
查找内容:Pages (464)</span></li>Inlinks (562)</a>)
表达式1结果:562 表达式2结果:562)</a> (注:表达式1中多了一个?,表示匹配尽可能少的字符)
就单单取得562这个结果也可以这样:(?<=links \().*(?=\)<) (注:红色部分是当前唯一)
如果表达式:Inlinks \(.*?\) 则结果为 Inlinks (562)
4.多层匹配
表达式:约 (\d*?),(\d*?),(\d*?) 条
查找内容:找到约 38,000,000 条结果
结果:约 38,000,000 条 (注:可单独取出逗号隔开的数字如 38)
5.ex (?<=\<div5\>)([\s\S]*?)(?=\<\/div5\>)
<div5><d<div>Features:<br><br
<title>dkjfdkfjdk</title>
Fully compliant with DVB-S2 <br>
<title>dfdf</title>
Support 7days EPG<br>
(?<=结果)\d*(?=个) </div5>
6.asp正则提取实例 如提取 <div>和</div>之间的内容
Dim regEx, Match, Matches ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = "(<div>)(.[^<]*)(</div>)" ' 设置模式。
'regEx.IgnoreCase = True ' 设置是否区分大小写。
regEx.Global = True ' 设置全局替换。
Set Matches = regEx.Execute(replace(rs("ebody"),"<br>","")) ' 执行搜索。
For Each Match in Matches ' 遍历 Matches 集合。
Response.Write replace(Match.SubMatches(1)," ","<br>")
Next
vb.net中实现
- Public Function searchE(ByVal allStr As String, ByVal findStr As String) As String '正则表达式
- Try
- Dim reg As New Regex(findStr)
- Dim n As MatchCollection = reg.Matches(allStr)
- regNum = n.Count.ToString
- 'Return n.Item(0).ToString
- Return n.Item(0).Groups(0).ToString() 'Item(0)一层; groups(0)二层,如多个(约 38,000,000 条)中 取38
- Catch ex As Exception
- ' MsgBox(ex)
- msgInfo("无效查询!", "")
- End Try
- Return Nothing
- End Function
C#中 正则表达式一次性替换多个字符(替换结果相同)
sUpLevel = "ele◆ct sNa├me fr─om Sor";
sUpLevel = Regex.Replace(sUpLevel, "◆├|─", "");
对于要替换成不同的结果可以参考如下:
var result = Regex.Replace("aaaaaa111bbbbbbbbbb222cccccc333ddddddddd", "111|222|333", (ma) =>
{
switch (ma.Value)
{
case "111":
return "xxx";
case "222":
return "yyy";
case "333":
return "zzz";
default:
return ma.Value;
}
});
Console.WriteLine(result);
c#中验证是否有特殊字符,可验证多个(如果是验证其它条件可选择下方的@+方式)
if (Regex.IsMatch(txtCate.Text, "◆|├|─|(|)"))
{
cateInfo.Text = "分类中不能含有特殊字符";
return;
}
C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
电话号码@"^(\d{3,4}-)?\d{6,8}$"
手机号码@"^[1]+[3,5]+\d{9}"
身份证号@"(^\d{17}(?:\d|x)$)|(^\d{15}$)"
验证输入为数字@"^[0-9]*$"
验证邮编@"^\d{6}$"
所有正则表达式语法的字符都需要转义。
特别字符 说明
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \.
[ ] 标记一个中括号表达式的开始。要匹配 [],请使用 \[ ,\]。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ }标记限定符表达式的开始。要匹配 {},请使用 \{, \}。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。