instrrev 函数

VBS中InStrRev函数使用过不少,但是几乎没有用过第三个参数,今天才发现第三个参数的用法跟我想的不太一样。

<%

返回某字符串在另一个字符串中出现的从结尾计起的位置。

文档中是这么描述InStrRev函数的:

a = “12345600000”

instrrev(string1, string2[, start[, compare]])

返回某字符串在另一个字符串中出现的从结尾计起的位置。

a = replace(a,”00″,”/”)

参数
string1

InStrRev(string1, string2[, start[, compare]])
参数

response.write a

必选项。接受搜索的字符串表达式。

string1
必选项。接受搜索的字符串表达式。
string2
必选项。被搜索的字符串表达式。
Start
可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,则默认值为
-1,表示从最后一个字符的位置开始搜索。如果 start 包含 Null,则出现错误
compare
可选项。在计算子字符串时,指示要使用的比较类型的数值。如果省略,将执行二进制比较。有关数值,请参阅“设置”部分。

%>

string2

澳门新葡萄京官网首页,第三个参数用于设置每次搜索的开始位置。如果省略,则默认值为
-1,表示从最后一个字符的位置开始搜索。于是我想当然的认为如果不省略(假设为N),则表示从最后第N个字符的位置开始搜索。至于为什么会有这样的思维定势,可能是文档表述不清,也可能是受到了其他语言的影响。

输出——————–

必选项。被搜索的字符串表达式。

看一个简单的脚本:

123456//0

start

s =

replace 方法

可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,则默认值为
-1,
表示从最后一个字符的位置开始搜索。如果 start 包含 null,则出现错误

n = InStrRev(s, “jb51”)
WScript.Echo n

描述

compare

n = InStrRev(s, “jb51”, 2)
WScript.Echo n

替换在正则表达式查找中找到的文本。

可选项。在计算子字符串时,指示要使用的比较类型的数值。如果省略,将执行二进制比较。有关数值,请参阅“设置”部分。

第一次输出8,这没有问题;而第二次居然输出0,表示没有找到字符串jb51。问题在于第三个参数不是表示从最后第N个字符的位置开始搜索,而是从开始第N个字符开始搜索。

语法

设置
compare 参数可以有以下值:

所以InStrRev(s, “jb51”, 2)相当于InStrRev(Left(s, 2),
“jb51”),当然是搜索不到的。

object.Replace(string1, string2)

常数 描述
vbbinarycompare 0 执行二进制比较。
vbdatabasecompare 2
执行基于包含在数据库(在此数据库中执行比较)中的信息的比较。

顺便说一下中文文档里对最后一个参数的描述是错误的:

Replace 方法的语法包含以下几个部分:

返回值
instrrev 返回以下值:

compare 参数可以有以下值:

部分 描述

如果 instrrev 返回
string1 为零长度 0
string1 为 null null
string2 为零长度 start
string2 为 null null
string2 没有找到 0
在 string1 中找到 string2 找到匹配字符串的位置
start > len(string2) 0

vbBinaryCompare 执行二进制比较。

object 必需的。总是一个 RegExp 对象的名称。

说明
下面的示例利用 instrrev 函数搜索字符串:

vbDatabaseCompare
执行基于包含在数据库(在此数据库中执行比较)中的信息的比较。

string1 必需的。string1 是将要进行文本替换的字符串。

dim searchstring, searchchar, mypos
searchstring =”xxpxxpxxpxxp” string to search in.
searchchar = “p” search for “p”.
mypos = instrrev(searchstring, searchchar, 10, 0) a binary comparison
starting at position 10. returns 9.
mypos = instrrev(searchstring, searchchar, -1, 1) a textual comparison
starting at the last position. returns 12.
mypos = instrrev(searchstring, searchchar, 8) comparison is binary by
default (last argument is omitted). returns 0.
注意 instrrev 函数的语法与 instr 函数的语法并不一样。

正确的是vbBinaryCompare和vbTextCompare,所以尽量看英文文档,虽然其中的错误也不少。

string2 必需的。 string2 是替换文本字符串。

说明

被替换的文本的实际模式是通过 RegExp 对象的 Pattern 属性设置的。

Replace 方法返回 string1 的副本,其中的 RegExp.Pattern 文本已经被替换为
string2。如果没有找到匹配的文本,将返回原来的 string1 的副本。

下面的例子说明了 Replace 方法的用法:

Function ReplaceTest(patrn, replStr)

   Dim regEx, str1      ‘ 建立变量。

   str1 = “The quick brown fox jumped over the lazy dog.”
Set regEx = New RegExp     ‘ 建立正则表达式。

   regEx.Pattern = patrn     ‘ 设置模式。

   regEx.IgnoreCase = True     ‘ 设置是否区分大小写。

   ReplaceTest = regEx.Replace(str1, replStr) ‘   作替换。

End Function

MsgBox(ReplaceTest(“fox”, “cat”))

‘ 将 ‘fox’ 替换为 ‘cat’。

;另外,Replace 方法在模式中替换 subexpressions 。
下面对以前示例中函数的调用,替换了原字符串中的所有字对:

MsgBox(ReplaceText(“(S+)(s+)(S+)”, “$3$2$1”))


Replace 函数

描述

返回字符串,其中指定数目的某子字符串被替换为另一个子字符串。

语法

Replace(expression, find, replacewith[, compare[, count[,
start]]])

Replace 函数的语法有以下参数:

参数 描述

expression 必选。 字符串表达式 包含要替代的子字符串。  

find 必选。被搜索的子字符串。

replacewith 必选。用于替换的子字符串。

start 可选。expression 中开始搜索子字符串的位置。如果省略,默认值为
1。在和count 关联时必须用  

count 可选。执行子字符串替换的数目。如果省略,默认值为
-1,表示进行所有可能的替换。在和 start 关联时必须用。

compare
可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,缺省值为
0 ,这意味着必须进行二进制比较。

设置

compare 参数可以有以下值:

常数 值 描述

vbBinaryCompare 0 执行二进制比较。”

vbTextCompare 1 执行文本比较。

返回值

Replace 返回以下值:

如果 Replace 返回

expression 为零长度 零长度字符串 (“”)。

expression 为 Null 错误。

find 为零长度 expression 的副本。

replacewith 为零长度 expression 的副本,其中删除了所有由 find
参数指定的内容。

start > Len(expression) 零长度字符串。

count 为 0 expression 的副本。

说明

Replace 函数的返回值是经过替换(从由 start 指定的位置开始到 expression
字符串的结尾)后的字符串,而不是原始字符串从开始至结尾的副本。

下面的示例利用 Replace 函数返回字符串:

Dim MyString

MyString = Replace(“XXpXXPXXp”, “p”, “Y”)
‘二进制比较从字符串左端开始。返回 “XXYXXPXXY”。

MyString = Replace(“XXpXXPXXp”, “p”, “Y”,
‘文本比较从第三个字符开始。返回 “YXXYXXY”。3,, -1, 1)