明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3561|回复: 9

[源码] 关于wcmatch的问题

[复制链接]
发表于 2010-1-28 13:57:00 | 显示全部楼层 |阅读模式

怎么用wcmatch检查字符串是否是如下的字符格式:[string]或者<string>

(setq str1 "[string]")

(wcmatch str1 "

  • ")或者(wcmatch str1 "'[*']")

    nil

    为什么返回是空?

    正确的写法应该是什么?或者有什么其它的判断方法?

  • 发表于 2010-1-28 14:17:00 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
     楼主| 发表于 2010-1-28 15:42:00 | 显示全部楼层

    我使用转义符了,但是好像还是不行??

    发表于 2010-1-28 17:13:00 | 显示全部楼层
    _$ (wcmatch "[string]" "`[*`]")
    T
     楼主| 发表于 2010-1-28 20:56:00 | 显示全部楼层

    下午在试的时候发现那个小撇不是单引号,而是键盘1边上的那个小点,自个去晕一下,呵呵,惭愧惭愧...

    谢谢几位了

     楼主| 发表于 2010-1-28 20:57:00 | 显示全部楼层

    原来不是单引号,下午试的时候发现了,惭愧惭愧

    谢谢几位了..

    发表于 2011-7-3 03:39:28 | 显示全部楼层
    wcmatch
      


    将模式字符串与某指定的字符串进行匹配比较

    (wcmatch string pattern)
    参数

    string

    要比较的字符串。比较是区分大小写的,所以必须严格匹配大小写字符。

    pattern

    模式字符串,包含与 string 进行匹配的模式。pattern 可以包含表通配符中所列的通配符。在多个模式条件之间用逗号 (,) 分隔。函数仅比较 string 和 pattern 的前 500 个字符(约数),后面的字符将被省略。

    这两个参数既可以是由双引号引起来的字符串,也可以是变量。可以使用其他 明经通道 AutoLISP 函数返回的变量和值作为 string 和 pattern 的值。

    返回值

    如果 string 和 pattern 匹配,wcmatch 返回 T,否则 wcmatch 返回 nil。

    通配符

    通配符
    定义

    # (磅值符号)
    匹配任意单个数值字符

    @ (at)
    匹配任意单个字母字符

    . (句号)
    匹配任意单个非字母数值字符

    * (星号)
    匹配任意字符序列,包括空字符串,它可以出现在任何位置,包括开头、中间和结尾处

    ? (问号)
    匹配任意单个字符

    ~ (波浪号)
    如果它是模式字符串的第一个字符,则匹配除此字符串之外的任意字符串

    [...]
    匹配括号中的任意一个字符

    [~...]
    匹配不在括号中的任意单个字符

    – (连字符)
    用在括号里面,用来指明单个字符的取值范围

    , (逗点)
    分隔两个模式字符串

    ` (单引号)
    特殊转义字符(按字义读取随后的字符)


    示例

    该例子测试字符串 "Name" 是否以字符 N 开头:

    命令: (wcmatch "Name" "N*")

    T

    下例进行三个比较。只要字符串匹配三个模式字符串中的任何一个,wcmatch 返回 T。在本例中进行的测试有:

    字符串包含三个字符?
    字符串中不含字符 m?
    字符串以字符 N 开头?
    如果满足其中至少一个条件,则 wcmatch 返回 T:

    命令: (wcmatch "Name" "???,~*m*,N*")

    T

    本例中满足最后一个条件,所以 wcmatch 返回 T。

    在 wcmatch 中使用转义字符

    要测试一个字符串中的通配符,可以使用单个单引号 (`) 来转义字符。转义是指跟在单个单引号后面的字符不当作通配符读取,而是按其表面值进行比较。例如,为了测试在字符串 Name 中是否包含逗号,可以使用如下表达式:

    命令: (wcmatch "Name" "*`,*")

    nil

    由于 C 和 AutoLISP 程序设计语言都使用反斜杠 (\) 作为转义字符,所以在字符串中必须使用两个反斜杠 (\\) 才能表示一个反斜杠。为了测试字符串 Name 中是否包含一个反斜杠,可以使用如下表达式:

    命令: (wcmatch "Name" "*`\\*")

    nil

    所有包含在括号 ([ . . . ]) 中的字符都按字义读取,所以不必使用转义字符。但有如下例外:只有当波浪线字符 (~) 不是括号里的第一个字符(如 [A~BC])时才按字义读取;否则作为一个“非”字符读取它,这意味着 wcmatch 函数将匹配跟随在波浪号之后那些字符(如 [~ABC])之外的所有字符。而连字符 (-) 则只有当它是括号中的第一个字符或最后一个字符(如 [-ABC] 或 [ABC-]),或者它跟在前导的波浪号后面时,才按字义读取。否则,在括号中的连字符用于指定某特定字符的取值范围。该范围仅限于单个字符,所以,STR[1-38] 与 STR1、STR2、STR3 和 STR8 匹配,而 [A-Z] 与任意单个大写字母匹配。

    如果闭括号 ("]") 是括号内的首个字符或跟随在波浪号之后(如 [ ]ABC] 或 [~]ABC]),它将被按字义读取。

    注意 由于 AutoLISP 的后续版本中可能会加入其他的通配符,所以建议在样本中给所有非字母数值字符加上转义字符转义,以确保它的向上兼容性。
    发表于 2012-12-31 18:23:12 | 显示全部楼层
    其实还是没有怎么看懂,,排除的方式,,
    发表于 2013-6-21 11:04:00 | 显示全部楼层
    解释得比书上详细!
    发表于 2016-5-31 17:48:14 | 显示全部楼层
    不错的讲义,谢谢
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
    ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

    GMT+8, 2025-5-20 07:55 , Processed in 0.190124 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表