Re: [問題] 正規表示式Regex 觀念詢問

作者: don750421 (1+1≠2)   2014-07-14 21:39:11
最近剛好有遇到正規表示法的需求,研究了一下用法及其表示的意思。
但真的就如同網路上所搜尋到的教學一樣,非常困難。
有個問題是我想透過正規表示法擷取字串。(Substring的做法也行,但想試試別種)
假設有個string input = "01234567890123456789";
我需要擷取,字串第二個開始從後面數來三碼(也就是567)
我研究出來使用正規表示法 .*(?<aaa>.{3}).{2} http://ppt.cc/KIeK
這種方式擷取出來,會以Group的方式呈現,
所以只要去抓 aaa 這個group 即可。 如圖:http://ppt.cc/09PP
問題一:
但是,我不想要使用Group ,想要直接Match String出來就是我要的結果。
這樣有辦法嗎?我直接改成 .*(.{3}).{2} 就抓不到我要的"567"了
以下這個例子就沒有使用到Group,直接Match String就有結果了。
http://ppt.cc/AkwF 網頁測試 Regex: http://ppt.cc/B1pV
問題二:
P.S :以上兩種方式都可以取出要的東西,有使用Group和沒有使用Group有啥差別呢??
※ 引述《don750421 (1+1≠2)》之銘言:
: Regex 中 有一個屬性是 RightToLeft。
: 想請問一下,假設我的字串為
: string a =
: "The 2D matrix representing an image.Rotate the image by 90 degrees";
: 如果我要擷取由右邊第8的字元擷取至,由右邊數來第11個字元。
: 也就是,我要取得 "90" 這個字串。
: 想請問可以透過Regex做到嗎??
作者: a926 (Aaron)   2014-07-16 10:18:00
你有用到()的話即使你沒有用?<name>做命名 他還是一樣是Group只是變成用0、1、2這種用index方式命名的Group我用Expresso 測試你的.*(.{3}).{2}是可以得到567的結果
作者: ssccg (23)   2014-07-16 12:53:00
你都已經找到解法了不會試著改一下?用你給的改一下就是 (?<=^.*).{3}(?=.{2}$)或是更簡單一點 .{3}(?=.{2}$)
作者: a926 (Aaron)   2014-07-17 09:19:00
以你的例子 如果你只用.*.{3}.{2}會抓到原字串但是當你加上(.{3}) 除了原字串,會額外多一個Group去抓你的456567才對Sry.我用C#測的結果會有2個Group 一個原字串 一個是567

Links booklink

Contact Us: admin [ a t ] ucptt.com