经典正则表达式
1。正则表达式[将font标签转换为span
<div style="font-size:14px;">
<p style="margin-buttom:24px;line-height:24px;"><span style="color:#ff0000"><b>春花秋月何时了</b></font></p>
<p style="margin-buttom:24px;line-height:24px;"> <font color="#ffffa0"><b>往事知多少</b></font>,<font color="#a0a0ff"><i>小楼</i></font>昨夜<font color="#ffffa0"><b>又东</b></font>风<font color="#a0ffa0"><b>故国不堪回首月明中 </b></font></p>
</font></div>将其翻译成vim正则语言代码:
%s!<font\s\+color="\([^"]\+\)"><b>\(.\{-}\)</b></font>!<span style="color:\1;font-weight:bold;">\2</span>!g
%s!<font\s\+color="\([^"]\+\)"><i>\(.\{-}\)</i></font>!<span style="color:\1;font-style:italic;">\2</span>!g
%s!<font\s\+color="\([^"]\+\)">\(.\{-}\)</font>!<span style="color:\1;">\2</span>!g
请在命令模式下输入:之后逐条运行。
第一条是处理font内嵌b标签的;
第二条是处理font内嵌i标签的;
第三条是处理其它情况的。如果您有其它的内标签,可以在2之后,3之前,插入新的规则。
如果不存在相应的匹配,vim会有提示,忽略即可。 以下是perl完整程序:
#!/usr/bin/perl
$text = <<END;
<div style="font-size:14px;">
<p style="margin-buttom:24px;line-height:24px;"><span style="color:#ff0000"><b>春花秋月何时了</b></font></p& gt;
<p style="margin-buttom:24px;line-height:24px;"> <font color="#ffffa0"><b>往事知多少</b></font>,<font color="#a0a0ff"><i>小楼</i></font>昨夜<font color="#ffffa0"><b>又东</b></font>风<font color="#a0ffa0"><b>故国不堪回首月明中 </b></font></p>
</font></div>
END
$text =~ s!<font\s+color="([^"]+)"><b>(.*?)</b></font>!<span style="color:$1;font-weight:bold">$2</span>!sig;
$text =~ s!<font\s+color="([^"]+)"><i>(.*?)</i></font>!<span style="color:$1;font-style:italic;">$2</span>!sig;
$text =~ s!<font\s+color="([^"]+)">(.*?)</font>!<span style="color:$1;">$2</span>!sig;
print $text;
2。去掉注释正则表达式
PHP 代码: $result = preg_replace('%(?<!\b(["\'])[^\1]+)/\*(?:(?!\*/).)*?\*/(?![^\'"]*?[\'"]\W)%', '', $subject);
3。过滤指定html标签的正则表达式(P标签(只是TD标签内的P标签,其他的P不过滤))
VB6Dim ResultString As String
Dim myRegExp As RegExp
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "(<td[^>]*>\s*)<p[^>]*>([^<]+)</p>\s*(</td>)"
ResultString = myRegExp.Replace(SubjectString, "$1$2$3")VB.NET
Dim ResultString As String
Try
Dim RegexObj As New Regex("(?<=<td[^>]*>\s*)<p[^>]*>([^<]+)</p>\s*(?=</td>)", RegexOptions.IgnoreCase)
ResultString = RegexObj.Replace(SubjectString, "$1")
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
或者
Dim ResultString As String
Try
Dim RegexObj As New Regex("(<td[^>]*>\s*)<p[^>]*>([^<]+)</p>\s*(</td>)", RegexOptions.IgnoreCase)
ResultString = RegexObj.Replace(SubjectString, "$1$2$3")
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
其它办法:(?<=<td[^>]*>\s*)<p[^>]*>([^<]+)</p>(?=\s*(?:</td>))
匹配出来的结果,替换为第一个捕获组就可以了
4。取出HTML中某段字符串[PHP]
可以将需要的部分先预处理一下:$result = preg_replace('%^.*?<table[^>]+>|</table>.*?$%s', '', $tmp);
1. “查询结果”之前的垃圾文字可以删除:^.*?(?=查询结果)
2. 新行中有数字、英文、空格之类的字符,无用,可以删除:^[0-9a-zA-Z\s]{0,3}
3. 删除tags,保留<br>:<(?!br)[^>]+>
$result = preg_replace('%^.*?<table[^>]+>|</table>.*?$%s', '', $tmp);
$result = preg_replace('/^.*?(?=查询结果)|<(?!br)[^>]+>|^[0-9a-zA-Z\s]{0,3}/simx', '', $result);
5。偶数个a奇数个b的正则
^(([^b]*b[^b]*){2})*[^b]*b[^b]*$|^(([^a]*a[^a]*){2})+$
6。一个关于星期+日期的正则表达式
(?:MO|TU|WE|TH|FR|SA|SU)(?:0[1-9]|[1-2]\d|3[0-1])(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)
使用(?:...)表示只群集,不捕获,以提升效率。
7。匹配任意中文s/^\[\w*\]\.//
8。括号前为一位或两位字母;括号内第一位为数字,后跟0~3位数字或字母
perl正则表达式代码:s/(?<=[a-z])\(|\)(?=[ -])//ig;
9。在EXCEL里提取数据的程序
Sub GetAuthorAndPress()''
GetAuthorAndPress Macro'
Dim myRegExp As Object
Dim Myrange As Range, C As Range
Set myRegExp = CreateObject("vbscript.regexp")
' 设置RegExp 的属性
'myRegExp.Pattern = "^(.*?)编(?:译)?。(.*?)出版社"
myRegExp.Pattern = "(.*?)编(?:译)?。(.*?)出版社"
Set Myrange = Sheet1.Range("B1:B4")
For Each C In Myrange
Set myMatches = myRegExp.Execute(C.Value)
If myMatches.Count >= 1 Then
Set myMatch = myMatches(0)
If myMatch.SubMatches.Count >= 1 Then
C.Offset(0, 2) = myMatch.SubMatches(0)
C.Offset(0, 3) = myMatch.SubMatches(1) + "出版社"
End If
End If
Next
End Sub
10。
<div style="font-size:14px;">
<p style="margin-buttom:24px;line-height:24px;"><span style="color:#ff0000"><b>春花秋月何时了</b></font></p>
<p style="margin-buttom:24px;line-height:24px;"> <font color="#ffffa0"><b>往事知多少</b></font>,<font color="#a0a0ff"><i>小楼</i></font>昨夜<font color="#ffffa0"><b>又东</b></font>风<font color="#a0ffa0"><b>故国不堪回首月明中 </b></font></p>
</font></div>将其翻译成vim正则语言代码:
%s!<font\s\+color="\([^"]\+\)"><b>\(.\{-}\)</b></font>!<span style="color:\1;font-weight:bold;">\2</span>!g
%s!<font\s\+color="\([^"]\+\)"><i>\(.\{-}\)</i></font>!<span style="color:\1;font-style:italic;">\2</span>!g
%s!<font\s\+color="\([^"]\+\)">\(.\{-}\)</font>!<span style="color:\1;">\2</span>!g
请在命令模式下输入:之后逐条运行。
第一条是处理font内嵌b标签的;
第二条是处理font内嵌i标签的;
第三条是处理其它情况的。如果您有其它的内标签,可以在2之后,3之前,插入新的规则。
如果不存在相应的匹配,vim会有提示,忽略即可。 以下是perl完整程序:
#!/usr/bin/perl
$text = <<END;
<div style="font-size:14px;">
<p style="margin-buttom:24px;line-height:24px;"><span style="color:#ff0000"><b>春花秋月何时了</b></font></p& gt;
<p style="margin-buttom:24px;line-height:24px;"> <font color="#ffffa0"><b>往事知多少</b></font>,<font color="#a0a0ff"><i>小楼</i></font>昨夜<font color="#ffffa0"><b>又东</b></font>风<font color="#a0ffa0"><b>故国不堪回首月明中 </b></font></p>
</font></div>
END
$text =~ s!<font\s+color="([^"]+)"><b>(.*?)</b></font>!<span style="color:$1;font-weight:bold">$2</span>!sig;
$text =~ s!<font\s+color="([^"]+)"><i>(.*?)</i></font>!<span style="color:$1;font-style:italic;">$2</span>!sig;
$text =~ s!<font\s+color="([^"]+)">(.*?)</font>!<span style="color:$1;">$2</span>!sig;
print $text;
2。去掉注释正则表达式
PHP 代码: $result = preg_replace('%(?<!\b(["\'])[^\1]+)/\*(?:(?!\*/).)*?\*/(?![^\'"]*?[\'"]\W)%', '', $subject);
3。过滤指定html标签的正则表达式(P标签(只是TD标签内的P标签,其他的P不过滤))
VB6Dim ResultString As String
Dim myRegExp As RegExp
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "(<td[^>]*>\s*)<p[^>]*>([^<]+)</p>\s*(</td>)"
ResultString = myRegExp.Replace(SubjectString, "$1$2$3")VB.NET
Dim ResultString As String
Try
Dim RegexObj As New Regex("(?<=<td[^>]*>\s*)<p[^>]*>([^<]+)</p>\s*(?=</td>)", RegexOptions.IgnoreCase)
ResultString = RegexObj.Replace(SubjectString, "$1")
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
或者
Dim ResultString As String
Try
Dim RegexObj As New Regex("(<td[^>]*>\s*)<p[^>]*>([^<]+)</p>\s*(</td>)", RegexOptions.IgnoreCase)
ResultString = RegexObj.Replace(SubjectString, "$1$2$3")
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
其它办法:(?<=<td[^>]*>\s*)<p[^>]*>([^<]+)</p>(?=\s*(?:</td>))
匹配出来的结果,替换为第一个捕获组就可以了
4。取出HTML中某段字符串[PHP]
可以将需要的部分先预处理一下:$result = preg_replace('%^.*?<table[^>]+>|</table>.*?$%s', '', $tmp);
1. “查询结果”之前的垃圾文字可以删除:^.*?(?=查询结果)
2. 新行中有数字、英文、空格之类的字符,无用,可以删除:^[0-9a-zA-Z\s]{0,3}
3. 删除tags,保留<br>:<(?!br)[^>]+>
$result = preg_replace('%^.*?<table[^>]+>|</table>.*?$%s', '', $tmp);
$result = preg_replace('/^.*?(?=查询结果)|<(?!br)[^>]+>|^[0-9a-zA-Z\s]{0,3}/simx', '', $result);
5。偶数个a奇数个b的正则
^(([^b]*b[^b]*){2})*[^b]*b[^b]*$|^(([^a]*a[^a]*){2})+$
6。一个关于星期+日期的正则表达式
(?:MO|TU|WE|TH|FR|SA|SU)(?:0[1-9]|[1-2]\d|3[0-1])(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)
使用(?:...)表示只群集,不捕获,以提升效率。
7。匹配任意中文s/^\[\w*\]\.//
8。括号前为一位或两位字母;括号内第一位为数字,后跟0~3位数字或字母
perl正则表达式代码:s/(?<=[a-z])\(|\)(?=[ -])//ig;
9。在EXCEL里提取数据的程序
Sub GetAuthorAndPress()''
GetAuthorAndPress Macro'
Dim myRegExp As Object
Dim Myrange As Range, C As Range
Set myRegExp = CreateObject("vbscript.regexp")
' 设置RegExp 的属性
'myRegExp.Pattern = "^(.*?)编(?:译)?。(.*?)出版社"
myRegExp.Pattern = "(.*?)编(?:译)?。(.*?)出版社"
Set Myrange = Sheet1.Range("B1:B4")
For Each C In Myrange
Set myMatches = myRegExp.Execute(C.Value)
If myMatches.Count >= 1 Then
Set myMatch = myMatches(0)
If myMatch.SubMatches.Count >= 1 Then
C.Offset(0, 2) = myMatch.SubMatches(0)
C.Offset(0, 3) = myMatch.SubMatches(1) + "出版社"
End If
End If
Next
End Sub
10。