主题:  Find,FindNoCase,FindOneOf,REFi

jaway

职务:普通成员
等级:1
金币:1.0
发贴:153
注册:2002/3/27 8:15:32
#12002/4/19 9:16:34
===============================================================
Find 查找

Findnocase 不区分大小写查找, 用的时候记住最后一个参数是最好用 "all"

FindOneof 如下例, 查找set1中任意一个字母在set2中出现的第一次的位置,
(从指定位置开始搜索,查找是大小写敏感的 )
如:



#result#
结果是4
Refind 不止高级一点的查询 查找是大小写敏感的

以下内容可能会引起你的头疼和不安, 本cfug(cfwindow)不负责...


Refind

~~~~~~
返回指定待查表达式在另一个字符串中从指定位置开始第一次出现的位置.

听起来好像和find不是一样吗?

OK, 我提一个问题, a.你要查在一个字符串中出现的第一个大写字母的位置?
b.要一次性返回所有的符合查询标准的位置和得到子字符串长度(这是一个数组构造)

find恐怕要写一个小程序才能实现吧, 我们看看Refind是怎样做到的?

语法:REFind(reg_expression, string [, start ] [, returnsubexpressions ] )

解释一下:

reg_expression
待查表达式. 可以包括POSIX标准的字符类
(如[[: alpha:]], [[: Digit:]], [[: upper:]], and [[: lower:]])
这是什么意思呢? 请熟悉unix shell的朋友解释一下, 我不知道中文怎样讲.
[[: alpha:]] 就表示阿法字母意思
[[: Digit:]] 就表示数字的意思
[[: upper:]] 就表示大写字符意思
[[: lower:]] 就表示小写字符意思

说错了请指正!

string
被搜索字符串

start
搜索开始位置, 默认为1

returnsubexpressions
啊哟!这个就厉害啦.一个布尔值,默认为false.
当等于true的时候, 返回一个包括第一次符合查找标准的子字符串的位置和长度的两个
数组的CF构造(CFML structure). 晕了吧, cfwindow没有药, 接着看吧..

你可以使用构造中的关键字 "pos" 和 "len." 来得到结果, 如果查询结果为空,

那么pos和len的数组就只包含含有一个零的元素.

当等于FALSE的时候,我就不讲你也知道只是返回第一次符合标准的结果了.

看看例子吧! 看完就不晕了.

REFind("a+c+", "abcaaccdd"):
#REFind("a+c+", "abcaaccdd")#
结果为4
翻译成中文sql就是寻找a?c?的东东.在上个字符中aacc符合标准
REFind("a+c*", "abcaaccdd"):
#REFind("a+c*", "abcaaccdd")#
结果为1
翻译成中文sql就是寻找a?c%的东东.在上个字符中abca符合标准


REFind("[[:upper:]]", "abcaacCDD"):
#REFind("[[:upper:]]", "abcaacCDD")#
结果为7
翻译成中文sql就是寻找第一个大写字母的东东.在上个字符中"C"符合标准


REFind("[\?&]rep=", "report.cfm?rep=1234&u=5"):
#REFind("[\?&]rep=", "report.cfm?rep=1234&u=5")#
结果为11

翻译成中文sql就是"?" 这个我都不太懂, 谁来解释一下!


更难的来了!

*******************************************************************


#teststring#


st就是返回的一个构造,翻译成中文sql就是查询在teststring中所有阿法字母的位置, 长度,
st.pos[1] 等于#st.pos[1]#. 结果是1
st.len[1] 等于#st.len[1]#. 结果是1
查询得到的子字符串是 #Mid(testString,st.pos[1],st.len[1])# 结果是T
每个数组中的元素是: #ArrayLen(st.pos)#. (结果是1)
为什么只找到一个呢? 哦, 原来返回的是第一次出现的位置.


怎样返回所有的东西呢?


下面这个例子我实在是搞不懂了, 谁能看的懂解释一下.
(在help文件中有这个例子, 我搞不下去了!)

However, if you use parentheses in the regular expression,
you will find that the first element contains the
position and length of the first instance of the whole expression.
The position and length of the first instance
of each parenthesized subexpression within will be included in additional
array elements.

例如


The number of elements in each array is #ArrayLen(st1.pos)#. //"返回的结果是3"
First whole expression match; position is

#st1.pos[1]#; length is #st1.len[1]#;
whole expression match is #Mid(testString,st1.pos[1],st1.len[1])#


Subsequent elements of the arrays provide the position and length
of the first instance of each parenthesized subexpression therein.


Position is #st1.pos#; Length is #st1.len#;
Substring is #Mid(testString,st1.pos,st1.len)#]



要是下次有人说cf简单, 拿这个请教一下, 把他搞晕...

编辑历史:[这消息被jaway编辑过(编辑时间2002-04-19 09:16:52)]


jaway

职务:普通成员
等级:1
金币:1.0
发贴:153
注册:2002/3/27 8:15:32
#22002/4/19 9:18:06
不知道asp在这方面有什么解答,上面的文章有几个问题尚未解决。



5D荣誉斑竹

职务:普通成员
等级:3
金币:10.0
发贴:1480
注册:2002/1/15 11:01:54
#32002/4/19 9:18:53
兄弟~是不是发错了?
要不要帮你转到CFM版?



jaway

职务:普通成员
等级:1
金币:1.0
发贴:153
注册:2002/3/27 8:15:32
#42002/4/19 10:50:47
没有,我现在讨论的是POSIX标准的字符类
你们asp 用应该是用这个的。