VBScript 正则表达式
无法匹配字符串中的字符,怎么回事呢,代码如下:--------------------------------------------------------------...
无法匹配字符串中的字符,怎么回事呢,代码如下:
----------------------------------------------------------------------------------------------------------------------------------
Dim re, s
Set re = New RegExp
re.Pattern = "\b<(\w+)>.*<\/\1>\b"
re.Global = True
re.IgnoreCase = True
s = "<body>hello</body> <title>world</title>" 'the string for searched
Set matches = re.Execute(s)
If matches.Count <> 0 Then 'retrieve the result
For Each match In matches
MsgBox match.Value
Next
d = re.Replace(s,"1")
MsgBox d
Else
MsgBox "match failed!"
End If
----------------------------------------------------------------------------------------------------------------------------------
运行后的截图,见下方
----------------------------------------------------------------------------------------------------------------------------------
在说明怎么改后,也请您不吝说明无法匹配的原因! 谢谢!
补充个问题:
怎么把一串数字中的单个abc替换成两个ABC,多个连续的ABC保持不动,举例来说string = "6ABCD1---ABDC---5ABCABC1----158---ABCABCABC15……"
ABC前后为任意字符, 把这个string中的第一个ABC替换成ABCABC请问正则表达式怎么写?
=============================================================VBS不支持(?<(!or=)exp)正则语法,但支持(?(!or=)exp)和引用分组 比如\1 \2 etc
上图, 此处为用(?<!ABC)产生的错误.
=============================================================
首先感谢 [自由de王国] 释疑了我的第一个疑问, 在此表示感谢!! 展开
----------------------------------------------------------------------------------------------------------------------------------
Dim re, s
Set re = New RegExp
re.Pattern = "\b<(\w+)>.*<\/\1>\b"
re.Global = True
re.IgnoreCase = True
s = "<body>hello</body> <title>world</title>" 'the string for searched
Set matches = re.Execute(s)
If matches.Count <> 0 Then 'retrieve the result
For Each match In matches
MsgBox match.Value
Next
d = re.Replace(s,"1")
MsgBox d
Else
MsgBox "match failed!"
End If
----------------------------------------------------------------------------------------------------------------------------------
运行后的截图,见下方
----------------------------------------------------------------------------------------------------------------------------------
在说明怎么改后,也请您不吝说明无法匹配的原因! 谢谢!
补充个问题:
怎么把一串数字中的单个abc替换成两个ABC,多个连续的ABC保持不动,举例来说string = "6ABCD1---ABDC---5ABCABC1----158---ABCABCABC15……"
ABC前后为任意字符, 把这个string中的第一个ABC替换成ABCABC请问正则表达式怎么写?
=============================================================VBS不支持(?<(!or=)exp)正则语法,但支持(?(!or=)exp)和引用分组 比如\1 \2 etc
上图, 此处为用(?<!ABC)产生的错误.
=============================================================
首先感谢 [自由de王国] 释疑了我的第一个疑问, 在此表示感谢!! 展开
1个回答
展开全部
你这是属于\b的误用。去掉两边的\b就好,你这里\b是多余的。
\b匹配单词分界的位置,也就是某个位置,两边分别是单词字符和非单词字符。单词字符就是数字字母下划线,可能包括汉字,看具体情况。非单词字符就是除了单词字符以外的字符。
在你的例子中,<的左边和>的右边都不能匹配\b,因为这两个位置的两边都是非单词字符,所以你的匹配失败了。
如果你明白什么是匹配位置的话,\b比较好理解。不明白的话继续提问。
推荐一篇博文,作者很厉害。
http://blog.csdn.net/lxcnn/article/details/4355364
\b匹配单词分界的位置,也就是某个位置,两边分别是单词字符和非单词字符。单词字符就是数字字母下划线,可能包括汉字,看具体情况。非单词字符就是除了单词字符以外的字符。
在你的例子中,<的左边和>的右边都不能匹配\b,因为这两个位置的两边都是非单词字符,所以你的匹配失败了。
如果你明白什么是匹配位置的话,\b比较好理解。不明白的话继续提问。
推荐一篇博文,作者很厉害。
http://blog.csdn.net/lxcnn/article/details/4355364
更多追问追答
追问
恩 懂了
==================
还有个问题,一直搞不懂.
怎么把一串数字中的单个abc替换成两个ABC,多个连续的ABC保持不动,举例来说
string = "6ABC1---ABDC---5ABCABC1----158---ABCABCABC15……"
把这个string中的第一个ABC替换成ABCABC
请问正则表达式怎么写?
追答
(?<!ABC)ABC(?!ABC)
替换成
ABCABC
或者如果你能保证ABC周围不是大写字母的话,也可以用下面的
([^A-Z])ABC([^A-Z])
替换成
\1ABCABC\2
PS.我不知道vb中使用\1\2来引用分组吗。不是的话,你自行改成对的吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询