kk_lee69 发表于 2015-10-29 11:55:26

回复 15# haijie1223

我理解 我只是因為不懂正則所以想要多了解一下語法上的差異   單就語法來說
用不用 [] 將;框住 是沒有關係的嚕

haijie1223 发表于 2015-10-29 16:51:18

回复 16# kk_lee69


    我的理解是这样的,不知道对不对,这个Afan说话比较有权威性。

haijie1223 发表于 2015-10-30 08:11:08

可能我一开始理解错误了,楼主可能是这个意思。(?m)^[^;]+;?以上的正则是请教Afan所得,希望能够解决楼主的问题。

kk_lee69 发表于 2015-10-30 09:45:52

回复 18# haijie1223
當   $A="1,2,3;KKK"匹配的結果是1,2,3;
當   $A="1,2,3;"匹配的結果是1,2,3;
當   $A="1,2,3"匹配的結果是1,2,3

我的希望是 匹配的結果都是1,2,3

另外 請教一下 這個正則可以這樣翻譯嗎??
(?m)^[^;]+;?
(?m) 設定 Multiline: 因為默認 Multiline 是關閉的 而 Multiline 必須要搭配 ^ 與 $ 匹配.
^[^;]+第一個 ^ 表示 匹配開頭 [^;] 表示不匹配以分號開頭的+表示 至少出現一次
;?表示 接著 ; 可以出現0 或者 一次

是這樣的意思嗎??
Multiline 的用途是甚麼呢

haijie1223 发表于 2015-10-30 13:14:11

回复 19# kk_lee69


   真搞不懂你,你是要替换还是要匹配啊?最后再给你回一帖吧,自己多琢磨:(?m)^[^;]+

kk_lee69 发表于 2015-10-30 14:12:22

回复 20# haijie1223

SORRY 我誤解意思了@@那個是替換的

原本的那個 (?m)^[^;]+;?可以 是我想要的.........感謝!!

kk_lee69 发表于 2015-10-30 14:13:42

回复 20# haijie1223

SORRY 我誤解意思了@@那個是替換的

原本的那個 (?m)^[^;]+;?可以 是我想要的.........感謝!!
   
原來替換的語法 跟 匹配的不一樣ㄟ@@

kk_lee69 发表于 2015-10-30 14:26:26

本帖最后由 kk_lee69 于 2015-10-30 14:33 编辑

回复 18# haijie1223

版主是我誤解了 不好意思(?m)^[^;]+;? 這個的確是我要的用取代的方式取;後面

另外一個需求 就是一樣 要用 取代的方式取 ;前面 如果有;號就取前面 沒;號 就需要返回字串本身
譬如:1,2,3;K,K與 1,2,3;與1,2,3取代後的字串都是 1,2,3

我用 ;(.*)這樣當 1,2,3 的時候 使用 工具測試 會出現 沒有找到可以替換的內容

afan 发表于 2015-10-30 14:44:27

本帖最后由 afan 于 2015-10-30 14:47 编辑

... 另外一個需求 就是一樣 要用 取代的方式取 ;前面 如果有;號就取前面 沒;號 就需要返回字串本身
譬如:1,2,3;K,K與 1,2,3;與1,2,3取代後的字串都是 1,2,3
...
kk_lee69 发表于 2015-10-30 14:26 http://www.autoitx.com/images/common/back.gif


    你这次说的比一楼的逻辑性强点,也清楚点。之前在3#问你的疑问你也是当我没问…
;(.*)如果你是用替换方式,不管工具提示什么,它都应该正确的返回 1,2,3 ,因为没匹配会返回全部。当然,你的小括号多余, ;.* 即可。

题外话:一个匹配表达式即可获得你需要的两个结果,为何非要分两次分别替换获得?

kk_lee69 发表于 2015-10-30 15:31:24

本帖最后由 kk_lee69 于 2015-10-30 15:33 编辑

回复 24# afan

目的是 預設一個全域變數字串   例如 $A   以分號隔開各自用途不同 ,因此返回數組對我來說不方便(應該說自己習慣問題)

當要用前面的部分 希望 直接獲取 前面段 不含分號, 當要用後面的時候 直接取後面使用

請參考 程式 示意.....

$A="1,2,3;a,b,c"


;经过计算的 变量 $ABC 与 变量 $DEF可能会在其他的地方 再变成
$A=$DEF&";"&$ABC


Func F1()

$ARRAY1=StringSplit(StringRegExpReplace($A,"(?m)^[^;]+;?",""),",",2)

For $I=0 TO UBound($ARRAY1)-1 Step 1
       
;经过计算 可能会得到 新的        变量 $ABC
Next


EndFunc


Func F2()

$ARRAY2=StringSplit(StringRegExpReplace($A,";(.*)",""),",",2)

For $I=0 TO UBound($ARRAY2)-1 Step 1

;经过计算 可能会得到 新的        变量 $DEF
       
Next


EndFunc

kk_lee69 发表于 2015-10-30 15:34:49

你这次说的比一楼的逻辑性强点,也清楚点。之前在3#问你的疑问你也是当我没问…
;(.*)如果你是 ...
afan 发表于 2015-10-30 14:44 http://www.autoitx.com/images/common/back.gif

一个匹配表达式即可获得你需要的两个结果

能請教一下 這個 匹配表達式嗎?? 順便多學點正則

afan 发表于 2015-10-30 15:37:26

本帖最后由 afan 于 2015-10-30 15:41 编辑

一个匹配表达式即可获得你需要的两个结果

能請教一下 這個 匹配表達式嗎?? 順便多學點正則
kk_lee69 发表于 2015-10-30 15:34 http://www.autoitx.com/images/common/back.gif


    ^([^;\v]*)(?:;?(\V*))
    顺便给你做了6种可能性测试 结果一目了然 就不用我说什么了Local $aStr = ['', _
                ';', _
                '1,2,3;A,b,C', _
                '1,2,3A,b,C', _
                '1,2,3A,b,C;', _
                ';1,2,3A,b,C']
Local $aSR, $i
For $i = 0 To 5
        $aSR = StringRegExp($aStr[$i], '^([^;\v]*)(?:;?(\V*))', 1)
        MsgBox(0, "'" & $aStr[$i] & "'", "'" & $aSR & "'" & @LF & "'" & $aSR & "'")
Next

kk_lee69 发表于 2015-10-30 15:53:51

回复 27# afan

感謝 版主 太強了果然每次都是返回兩種這樣子的方法 好像更簡潔些

我再研究看看謝啦

afan 发表于 2015-10-30 15:57:26

回复 28# kk_lee69


    上面的表达式是可用于多行测试的,前面加(?m)即可。如果都是单行,还可以简单一点
^([^;]*)(?:;?(.*))

afan 发表于 2015-10-30 16:19:59

网速慢到可以… 编辑都不行,以下即可,便于理解
^([^;]*);?(.*)
页: 1 [2] 3
查看完整版本: 正则问题 麻烦懂正则的帮忙看看 用正则拆字符串,取;前面与;后面[已解决]