- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
最近在 cmd.exe 中编写一些脚本时,我需要将 findstr
与正则表达式一起使用 - 客户需要标准的 cmd.exe 命令(没有 GnuWin32、Cygwin、VBS 或 Powershell)。
我只是想知道一个变量是否包含任何大写字符并尝试使用:
> set myvar=abc
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %errorlevel%
0
当 %myvar%
设置为 abc
时,实际上输出字符串并将 errorlevel
设置为 0,表示找到匹配项.
但是,完整列表变体:
> echo %myvar%|findstr /r "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
> echo %errorlevel%
1
不输出该行并且它正确地将errorlevel
设置为1。
另外:
> echo %myvar%|findstr /r "^[A-Z]*$"
> echo %errorlevel%
1
也按预期工作。
我显然在这里遗漏了一些东西,即使这只是 findstr
不知何故被破坏的事实。
为什么第一个(范围)正则表达式在这种情况下不起作用?
还有更多奇怪的地方:
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z][A-Z]"
> echo %myvar%|findstr /r "[A]"
上面最后两个也没有输出字符串!!
最佳答案
我认为这主要是一个可怕的设计缺陷。
我们都希望范围根据 ASCII 代码值进行整理。但它们没有——相反,范围基于几乎与 SORT 使用的默认序列相匹配的整理序列。 EDIT -FINDSTR 使用的确切归类序列现在可在 https://stackoverflow.com/a/20159191/1012053 获得。在标题为 Regex character class ranges [x-y] 的部分下。
我准备了一个文本文件,每个扩展 ASCII 字符一行,从 1 到 255,不包括 10 (LF)、13 (CR) 和 26(Windows 上的 EOF)。在每一行我都有字符,后跟一个空格,然后是字符的十进制代码。然后,我通过 SORT 运行文件并将输出捕获到 sortedChars.txt 文件中。
我现在可以针对这个排序后的文件轻松测试任何正则表达式范围,并演示该范围是如何由几乎与 SORT 相同的排序规则序列确定的。
>findstr /nrc:"^[0-9]" sortedChars.txt
137:0 048
138:½ 171
139:¼ 172
140:1 049
141:2 050
142:² 253
143:3 051
144:4 052
145:5 053
146:6 054
147:7 055
148:8 056
149:9 057
结果与我们预期的不完全相同,因为字符 171、172 和 253 被混合在一起。但结果是完全有道理的。行号前缀对应SORT排序顺序,可以看到范围完全按照SORT顺序匹配。
这是另一个完全遵循 SORT 序列的范围测试:
>findstr /nrc:"^[!-=]" sortedChars.txt
34:! 033
35:" 034
36:# 035
37:$ 036
38:% 037
39:& 038
40:( 040
41:) 041
42:* 042
43:, 044
44:. 046
45:/ 047
46:: 058
47:; 059
48:? 063
49:@ 064
50:[ 091
51:\ 092
52:] 093
53:^ 094
54:_ 095
55:` 096
56:{ 123
57:| 124
58:} 125
59:~ 126
60:¡ 173
61:¿ 168
62:¢ 155
63:£ 156
64:¥ 157
65:₧ 158
66:+ 043
67:∙ 249
68:< 060
69:= 061
有一个带有字母字符的小异常。字符“a”介于“A”和“Z”之间,但不匹配 [A-Z]。 “z”排在“Z”之后,但它匹配 [A-Z]。 [a-z] 存在相应的问题。 “A”排在“a”之前,但它匹配 [a-z]。 “Z”在“a”和“z”之间排序,但不匹配 [a-z]。
这是 [A-Z] 结果:
>findstr /nrc:"^[A-Z]" sortedChars.txt
151:A 065
153:â 131
154:ä 132
155:à 133
156:å 134
157:Ä 142
158:Å 143
159:á 160
160:ª 166
161:æ 145
162:Æ 146
163:B 066
164:b 098
165:C 067
166:c 099
167:Ç 128
168:ç 135
169:D 068
170:d 100
171:E 069
172:e 101
173:é 130
174:ê 136
175:ë 137
176:è 138
177:É 144
178:F 070
179:f 102
180:ƒ 159
181:G 071
182:g 103
183:H 072
184:h 104
185:I 073
186:i 105
187:ï 139
188:î 140
189:ì 141
190:í 161
191:J 074
192:j 106
193:K 075
194:k 107
195:L 076
196:l 108
197:M 077
198:m 109
199:N 078
200:n 110
201:ñ 164
202:Ñ 165
203:ⁿ 252
204:O 079
205:o 111
206:ô 147
207:ö 148
208:ò 149
209:Ö 153
210:ó 162
211:º 167
212:P 080
213:p 112
214:Q 081
215:q 113
216:R 082
217:r 114
218:S 083
219:s 115
220:ß 225
221:T 084
222:t 116
223:U 085
224:u 117
225:û 150
226:ù 151
227:ú 163
228:ü 129
229:Ü 154
230:V 086
231:v 118
232:W 087
233:w 119
234:X 088
235:x 120
236:Y 089
237:y 121
238:ÿ 152
239:Z 090
240:z 122
以及 [a-z] 结果
>findstr /nrc:"^[a-z]" sortedChars.txt
151:A 065
152:a 097
153:â 131
154:ä 132
155:à 133
156:å 134
157:Ä 142
158:Å 143
159:á 160
160:ª 166
161:æ 145
162:Æ 146
163:B 066
164:b 098
165:C 067
166:c 099
167:Ç 128
168:ç 135
169:D 068
170:d 100
171:E 069
172:e 101
173:é 130
174:ê 136
175:ë 137
176:è 138
177:É 144
178:F 070
179:f 102
180:ƒ 159
181:G 071
182:g 103
183:H 072
184:h 104
185:I 073
186:i 105
187:ï 139
188:î 140
189:ì 141
190:í 161
191:J 074
192:j 106
193:K 075
194:k 107
195:L 076
196:l 108
197:M 077
198:m 109
199:N 078
200:n 110
201:ñ 164
202:Ñ 165
203:ⁿ 252
204:O 079
205:o 111
206:ô 147
207:ö 148
208:ò 149
209:Ö 153
210:ó 162
211:º 167
212:P 080
213:p 112
214:Q 081
215:q 113
216:R 082
217:r 114
218:S 083
219:s 115
220:ß 225
221:T 084
222:t 116
223:U 085
224:u 117
225:û 150
226:ù 151
227:ú 163
228:ü 129
229:Ü 154
230:V 086
231:v 118
232:W 087
233:w 119
234:X 088
235:x 120
236:Y 089
237:y 121
238:ÿ 152
240:z 122
排序将大写字母排在小写字母之前。 (编辑 - 我刚刚阅读了 SORT 的帮助,了解到它不区分大写和小写。我的 SORT 输出始终将大写放在小写之前的事实可能是输入顺序的结果。) 但正则表达式显然将小写字母排在大写字母之前。以下所有范围均无法匹配任何字符。
>findstr /nrc:"^[A-a]" sortedChars.txt
>findstr /nrc:"^[B-b]" sortedChars.txt
>findstr /nrc:"^[C-c]" sortedChars.txt
>findstr /nrc:"^[D-d]" sortedChars.txt
颠倒顺序找到字符。
>findstr /nrc:"^[a-A]" sortedChars.txt
151:A 065
152:a 097
>findstr /nrc:"^[b-B]" sortedChars.txt
163:B 066
164:b 098
>findstr /nrc:"^[c-C]" sortedChars.txt
165:C 067
166:c 099
>findstr /nrc:"^[d-D]" sortedChars.txt
169:D 068
170:d 100
还有一些字符的正则表达式排序方式与 SORT 不同,但我没有得到准确的列表。
关于windows - 为什么 findstr 不能正确处理大小写(在某些情况下)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2635740/
我是 javascript 的新手(今天开始弄乱它)。 我正在尝试更改名为“bar”的元素(div)的高度。条形图将成为图表的一部分。 我可以毫无问题地将按钮连接到更改栏高度的函数。一切正常,除了条形
错误 -> “UIVIew”没有名为“addSubView”的成员 override func viewDidLoad() { super.viewDidLoad() // Do an
我在命令行工具项目中复制并粘贴了 main.swift 下面链接中的代码。 How do you use CGEventTapCreate in Swift? 它构建没有错误,但是当我运行时, gua
我在尝试编译我的代码时遇到以下错误。 ERROR! ..\myCode\CPOI.cpp:68:41: error: cannot dynamic_cast 'screenType' (of type
我正在尝试将多个字符串连接到一个我已为其分配内存的字符串指针。这是一个例子: char *finalNumString = malloc(sizeof(char)*1024); finalNumStr
我在使用 dup2() 和 pipe() 时遇到问题。 当我尝试将管道的写入端 dup2 到 STDOUT_FILENO 时,我收到了 EBADF。 我用 gdb 在 dup2(pout[1], ST
首先,我应该说我运行的是 Windows 7。 因此,今天早上我尝试像往常一样从我的存储库中提取数据,但我做不到。我得到了错误: The authenticity of host 'github.co
刚开始在虚拟环境中运行Python,乱用Django,无法激活虚拟环境。 花了最后 4 个小时尝试在本地终端/VS 代码上激活虚拟环境 (venv),但没有成功。 避免使用“sudo pip inst
Tidyverse 的粉丝经常给出使用小标题而不是数据框的几个优点。它们中的大多数似乎旨在保护用户免于犯错误。例如,与数据框不同,小标题: 不需要 ,drop=FALSE不从数据中删除维度的论据。 不
我一直在对 Elm 应用程序进行 docker 化时遇到问题。据我所知,我已经创建了一个完整且有效的 Docker 文件……但它不起作用。 我会解释的。 所以我的脚本在 3 个文件中运行。 首先是启动
我可以在 Controller 中使用@Autowired,例如 @RestController public class Index { @Autowired HttpServlet
我定义了一个方法和一个函数: def print(str:String) = println val intToString = (n:Int) => n.toString 现在我想创作它们。 我的问
当我控制台单独记录变量“pokemons”时,它确实返回一个数组。但是当我尝试映射它时,出现错误: TypeError: pokemons.map is not a function 我的代码: im
每当我尝试在 Python 解释器中导入 smtplib 时,都会收到此错误: ImportError: cannot import name fix_eols 我该如何解决这个问题? 编辑:这是完整
我正在使用 Meteor.js 开发一个项目,但在使用 Handlebar 时遇到了一些问题:我想检索集合的最后一项,并显示字段:其中包含 html 的文本: 这是我的javascript代码: Te
你好,我想使用 Service 实现 GestureDetector 但是我有这个错误The method onTouchEvent(MotionEvent) of type GestureServi
我正在尝试在 Controller bean 中 Autowiring 接口(interface) 在我放置的上下文配置文件中 和 我的 Controller 类是 @Controller pub
我试图在 mainwindow.cpp 中包含 QtSvg,但是当我编译时它说无法打开包含文件:QtSvg。我已经在我的 *.pro 文件中添加了这个(QT += svg)。我可以知道可能是什么问题吗
鉴于以下 PostgreSQL 代码,我认为这段代码不容易受到 SQL 注入(inject)攻击: _filter 'day' _start 1 _end 10 _sort 'article_name
我想执行以下操作。这在 MySQL 中是非法的。 PostGRESQL 中关联的 CTE(“with”子句)有效。这里的假设是 MySQL 中的子查询不是完全限定的 CTE。 请注意:这个查询显然非常
我是一名优秀的程序员,十分优秀!