[已解决]正则提取第一个\之前的段
本帖最后由 boyhong 于 2011-3-29 12:36 编辑如下:没有问题,可以正常提取: "\\ " 与第一个"\ "之间的字符串。
Local $Str = '\\192.168.8.30\log'
Local $Test = StringRegExpReplace($str, '\A\\\\(.*)\\.*', '$1')
MsgBox(0, '替换结果', $Test)
$Test = StringRegExp($str, '\A\\\\(.*)\\', 3)
MsgBox(0,"",$Test)
但是:如下,我无法在正则中指定第一个"\ "就结束匹配。
Local $Str = '\\192.168.8.30\log\111\test\\test\tet'
Local $Test = StringRegExpReplace($str, '\A\\\\(.*)\\.*', '$1')
MsgBox(0, '替换结果', $Test)
$Test = StringRegExp($str, '\A\\\\(.*)\\', 3)
MsgBox(0,"",$Test)
希望大家多多指点。 Local $Str = '\\192.168.8.30\log\111\test\\test\tet'
Local $Test = StringRegExpReplace($str, '\\\\([^\\]+).*', '$1')
MsgBox(0, '替换结果', $Test)
$Test = StringRegExp($str, '^\\\\([^\\]+)', 1)
MsgBox(0,"",$Test) 回复 1# boyhong
根据正则的贪婪特性,匹配时会最长字符匹配,为了避免此类情况,运用正则的懒惰特性?
最好是自己看下帮助,很简单在+或者*后面加一个?即可
如果觉得我的话很有道理 请给10个金币,嘿嘿 回复boyhong
根据正则的贪婪特性,匹配时会最长字符匹配,为了避免此类情况,运用正则的懒惰特性?
最 ...
love5173 发表于 2011-3-29 12:36 http://www.autoitx.com/images/common/back.gif
我已尝试了一下,但取出来包括了\\本身,比如: \\\\.*?\\ 本帖最后由 love5173 于 2011-3-29 12:53 编辑
Local $Str = '\\192.168.8.30\log\111\test\\test\tet'
Local $Test = StringRegExpReplace($str, '\A\\\\(.*?)\\.*', '$1')
MsgBox(0, '替换结果', $Test)
$Test = StringRegExp($str, '\A\\\\(.*?)\\', 3)
MsgBox(0,"",$Test)
只是给你稍微修改了一下,试试啊
测试结果是没问题的?是因为输入法的问题错误,下面的是修改完毕的
我只是想表达一个贪婪与懒惰的意思,没有想到你直接要完整的代码,我的错误,对不起 但这不是我想要的,苦苦想了好久时间,无解,才来发的贴,正则我掌握得太浅了。。。。正在加深学习中。
感谢您的关注。 只是给你稍微修改了一下,试试啊
love5173 发表于 2011-3-29 12:38 http://www.autoitx.com/images/common/back.gif
Not ok~~~but thank you for help me~ 回复 6# boyhong
或许你没明白我的意思,但是加油 Local $Str = '\\192.168.8.30\log\111\test\test\test'
Local $Test = StringRegExpReplace($str, '\\\\(.*?)\\.*', '$1')
MsgBox(0, '替换结果', $Test)
这个是我测试完毕的
相信你自己,学会贪婪与懒惰的运用 做习题了#include <Array.au3>
Local $sText = "\\192.168.0.1\\Share\\\\1\\\2\3\4"
Local $sRegExp= '(?<=^\\\\)[^\\]+'
Local $asResult = StringRegExp($sText, $sRegExp, 3)
If @error Then
MsgBox(4096, "", "返回结果非数组" &@LF& $asResult)
Else
For $i = 0 To UBound($asResult) - 1 Step 1
If StringLen($asResult[$i]) > 4094 Then
Local $IsCut = MsgBox(4096 + 48 + 4 + 256, "警告", "数组元素 $asResult[" & $i & "]长度超出显示界限(4094)" & @LF & "是否需要截取字符串?")
If $IsCut = 6 Then $asResult[$i] = StringLeft($asResult[$i], 4094)
EndIf
Next
_ArrayDisplay($asResult)
EndIf
$sText = StringRegExpReplace($sText, $sRegExp, 'ComputerName')
MsgBox(4096, "", $sText)留下一个问题,为什么$sRegExp= '\\\\([^\\]+).*'时,StringRegExp能只匹配第一个部分.但StringRegExpReplace却会替换整串字符? 回复 1# boyhong
如果获取指定形式【192.168.8.30】可以这样写.
(?:\d+\.){3}\d{2}
页:
[1]