[已解决]请教一个正则表达式提取字符串的问题
本帖最后由 邪恶海盗 于 2025-5-25 17:56 编辑$a='级别 普通 [时间 19:30:32]'
$b='level most important finish'
$Rea=StringRegExp($a,'.+\h(.+)\]',1)
$Reb=StringRegExp($b,'.*\h+(.*)\]',3)
MsgBox(0,"",$Rea & @LF & $Reb).+代表重复单字符,最小1次
\h代表空格
()代表包含
.*代表重复单字符,最小0次
\]代表]
这些都能理解,但放在一起完全看不懂,反正拼在一起能得到结果,谁能帮忙解释一下?
其实第一个正则可以匹配上面信息$a='级别 普通 [时间 19:30:32]'
$b='level most important finish'
$Rea=StringRegExp($a,'.+\h(.+)\]',3)
$Reb=StringRegExp($b,'.+\h(.+)\]',3)
;~ $Reb=StringRegExp($b,'.*\h+(.*)\]',3)
MsgBox(0,"",$Rea & @LF & $Reb) #include <Array.AU3>
$string = _
'级别 普通 [时间 19:30:32] ' & @CRLF & _
'level most important finish'
Local $Array = StringRegExp($string, '.+\s(.+)\]' ,3)
For $i = 0 To UBound($Array) - 1
NEXT
;以下为测试结果:
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($array), '其中$array数组为: ' & $array)
_ArrayDisplay($Array, UBound($Array)) \h代表空格,我在帮助里没查到,应是\s redapple2008 发表于 2025-5-23 15:45
\h代表空格,我在帮助里没查到,应是\s
\h 任何的水平空白字符.
\s 匹配任何的空白字符: Chr(9) 到 Chr(13).包括:水平制表符,换行,垂直列表符,换页,回车以及标准空格 ( Chr(32) ).
结果我得出来了,关键是怎么解释,也就是运行原理 从字符串开始的位置进行匹配,找到 ] 符号前面 ,离开始位置最远的水平空白符 与 ]之间的内容取出来。 .+所有字符
\s空白字符
(.+)铺获组
\] 反义]
不知道这样理解对不对?
haijie1223 发表于 2025-5-23 16:05
从字符串开始的位置进行匹配,找到 ] 符号前面 ,离开始位置最远的水平空白符 与 ]之间的内容取出来 ...
意思是.+代表的是所有字符,加上\h代表查找到最后一个空格位置? 邪恶海盗 发表于 2025-5-23 16:19
意思是.+代表的是所有字符,加上\h代表查找到最后一个空格位置?
.+\h(.+)\]
任意字符到最远的 \h (任意字符) ]
这样能理解吗 haijie1223 发表于 2025-5-23 16:27
.+\h(.+)\]
任意字符到最远的 \h (任意字符) ]
这样能理解吗
把“任意”改成“所有”会不会更精确一些? redapple2008 发表于 2025-5-23 16:13
.+所有字符
\s空白字符
(.+)铺获组
我感觉没错,正则太伤脑筋了... 邪恶海盗 发表于 2025-5-23 16:35
把“任意”改成“所有”会不会更精确一些?
这个随意,只要能理解就行 haijie1223 发表于 2025-5-23 16:36
这个随意,只要能理解就行
不不不,你不要欺负我们这些菜鸡,如果是.你说是任意字符可以理解,如果是.+或者.*代表重复任意字符,也就是所有字符的意思,如果也解释成“任意字符”则容易产生是单个字符的误区... 还有这个重复用*还是+更合适? * + 都是贪婪模式(尽可能多的匹配),前者可以匹配空,后者至少匹配一个字符
页:
[1]
2