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