正则的疑惑?[已解决]
本帖最后由 3mile 于 2012-6-2 08:06 编辑如字符串:
51230456118234
一句正则取连续自然数,
如:123456234
貌似正则不参与运算.有解吗?
求高人指教.
我自己也想过这个问题,只能用笨办法解决.
$abc='51230456118234'
$nub='0123456789'
Local $str=""
for $i=0 to stringlen($nub)-2
$str=stringmid($nub,$i,3)
If StringRegExp($abc,$str,0) then
$str=True
ExitLoop
EndIf
$str=False
next
MsgBox(0,0,$str)
回复 1# 3mile
自问正则知识上无法跟前辈相比, 自然也就帮不上忙了!
但发现了您发出的代码有点小错:
StringMid 函数截取字符串的最小位置应该从 1 开始, 而不是 0. 回复 2# user3000
多谢指教.
也许是数组用的多了,都用0基了. 本帖最后由 user3000 于 2012-5-18 15:50 编辑
回复 3# 3mile
没事做想了一下, 倒想到'另一种'取巧的 判断方法:#include <array.au3>
$abc='51230456118234'
$reg = '012'
For $i = 1 To 7
$reg &= '|' & ($reg + $i*111)
Next
$r = StringRegExp($abc, $reg, 3)
If Not @error Then _ArrayDisplay($r)或者直接截获所有的3个连续数字后再作判断?
Mod($n-12, 111) = 0 即为自然数
但思来想去, 正则上, 我却作不出如何截取所有的'连续序数' 了! $abc='51230456118234'
$nub='0123456789'
Local $str=""
for $i=1 to stringlen($nub)-2
$str=stringmid($nub,$i,3)
If StringRegExp($abc,"(?s)"&$str,0) then
;$str=True
;ExitLoop
$arr=StringRegExp($abc,"(?s)"&$str,1)
ConsoleWrite($arr&@CRLF)
EndIf
;$str=False
next
;MsgBox(0,0,$str)加了个参数,不知这样算不算对 回复 5# kevinch
无所谓对还是错,只是有点疑惑.
只是疑惑正则可不可以参与运算. 3G的意思是直接一句表达式出结果,不用循环之类的东东。 回复 1# 3mile
只取3位的连续自然数吗? 这个问题今天下午我和3G讨论了很久,私下我也想了很多,都没有成功,甚至于认为纯正则无解。
也许是我太孤陋寡闻了,所以非常期待高人的指点啊! 本帖最后由 Duvet 于 2012-5-18 23:38 编辑
全部列出來也是個辦法???
#Include <Array.au3>
Local $Str = "51230456118234"
Local $Result = StringRegExp($Str, "(0123456789|012345678|01234567|0123456|012345|01234|0123|012?|123456789|1345678|1234567|123456|12345|1234|123?|23456789|2345678|234567|23456|2345|234?|3456789|345678|34567|3456|345?|456789|4568|4567|456?|56789|5678|567?|6789|678?|789?|89)", 3)
;Local $Result = StringRegExp($Str, "(01(?>2(?>3(?>4(?>5(?>6(?>7(?>89?)?)?)?)?)?)?)?|12(?>3(?>4(?>5(?>6(?>7(?>89?)?)?)?)?)?)?|23(?>4(?>5(?>6(?>7(?>89?)?)?)?)?)?|34(?>5(?>6(?>7(?>89?)?)?)?)?|45(?>6(?>7(?>89?)?)?)?|56(?>7(?>89?)?)?|67(?>89?)?|789?|89)", 3)
_ArrayDisplay($Result)
本帖最后由 lixiaolong 于 2012-5-19 00:29 编辑
回复 1# 3mile
一句正则无法实现吧...
#include <array.au3>
$str = '51230456118234'
$regexp = '123|234|456|567|678|789'
$array = StringRegExp($str, $regexp, 3)
If Not @error Then
_ArrayDisplay($array)
_ArraySort($array)
_ArrayDisplay($array)
EndIf
我可能理解错了...
页:
[1]