[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我水平不行,这说的只可以试试,别当真了...
[] 里当然可以用补集,但不需要转义  [>] 和[^>] 但需要引号括起来
发生错误的原因,除了以为要转义外,主要是逻辑上有误,比如查的是 echo.*[^>] 那方括内不允许有“>”难道 “>” 不能包含在 .* 里么? 因此想要表达不允许有 > 符,必须把 .* 的 . 换成不允许有>才行,如果是加/v排除的写上要排除的那部分就行,没加/v 而用补集排除,那就得全匹配才能排除——不知我表达清楚没有
附上用于本题的命令还不知我理解题意没有,应该有点参考价值吧
  1. findstr/v "echo[^>]*[>] pause" 1.txt
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 5# bluewing009

如果说我那句是正好相反,则把 /v 去掉就行了,我确实没明白你的题意,要不就是这个意思:
  1. findstr/v "echo[^>]*$ pause" 1.txt
复制代码
总之, 你还是逻辑没理清,我这把有echo 不带 > 的和有echo 带 > 的两者选一都有例句了

TOP

回复 9# bluewing009


    我都无话可说,如果说结果承认但想不通为什么我还可以解释。
把我6楼用代码贴出来的你测试的情况描述一下总可以吧?

TOP

回复 13# bluewing009


    结果是对的才说明我理解题意对了,现帮你解释一下 echo[^>]*$ 可能多半的意思都懂,我讲得浅别介意,说得不对请各位高手指正。
都知道 . 表任意字符,那么[^>] 就表示除 > 之外的任意字符了
* 表示前一字符的 0 次或任意次重复,(注意是两者合作用,就是说不加 * 前面字符肯定会有,加了* 则也可以前字符1次也没有)
$ 表行结尾
那么 .*$ 表示的一直到行尾可以是任意字符——等于什么也没限制
那么 [^>]*$ 就是一直到行尾,是除了 > 之外的任意字符,换句话说,一直到行尾不允许有 > 符
如果不加 $ 呢?也就是你自己写的,那表示的一行里的某部分匹配就行了,虽然前面限制不要 > 符,但后面再有 > 符还是符合条件的,所以用
[^>]*$ 表示延续限制,可以没有字符了,也可以有多少字符都行,但不允许有 > 符
所以 echo[^>]*$ 就是表示自出现echo开始,一直到行尾不允许有 > 符
也就是匹配的是 echo 后不带 > 符的,如果也要求前面不带呢,^[^>]*echo[^>]*$
(当然也可用/b /e /x 等匹配参数代)
这说的是匹配,那么前面有参数/v 当然正好是排除这种情况了
相信整句不会再有疑问了吧

TOP

回复 17# bluewing009

呵呵,逻辑性强的东西,我再解释就是说“绕口令”了,恐怕只有你自己绕得清,先考虑不要/v时匹配什么,加上/v 就是排除它,不要扰和一起...

TOP

返回列表