正则表达中 \G 怎么个用法 \G 匹配必须从上一个匹配结束的位置开始 没看明白 比如 \Gabc 和 ^abc 有啥子区别嘛 怎么区分呢在.net中如何运用呢 大家来教教我吧 200分哦 甩了甩了 请说仔细点 有例子对比下就最好了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有这么一个Q: "0123456789"按每4个分开A(1): String[] strs = "0123456789".split("(?<=\\G.{4})");A(2):这个 "(?<=\\G.{4})" 要改为 "(?<=\\G.{4})(?!$)",否则会对 "12345678" 这类长度是 4 的倍数的字符串拆分时最后多一个空串出来。亮点:\G的使用 \G 的 MSDN解释:指定匹配必须出现在上一个匹配结束的地方。与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。http://msdn.microsoft.com/zh-cn/library/h5181w5w(v=vs.80).aspx之前写过一篇blog:http://blog.csdn.net/q107770540/article/details/6436973 MSDN也有这样的解释连续匹配:\G\G 定位标记指定匹配必须出现在上一个匹配结束的地方。 通过 Regex.Matches 或 Match.NextMatch 方法使用此定位点时,它确保所有匹配项是连续的。using System;using System.Text.RegularExpressions;public class Example{ public static void Main() { string input = "capybara,squirrel,chipmunk,porcupine,gopher," + "beaver,groundhog,hamster,guinea pig,gerbil," + "chinchilla,prairie dog,mouse,rat"; string pattern = @"\G(\w+\s?\w*),?"; Match match = Regex.Match(input, pattern); while (match.Success) { Console.WriteLine(match.Groups[1].Value); match = match.NextMatch(); } }}// The example displays the following output:// capybara// squirrel// chipmunk// porcupine// gopher// beaver// groundhog// hamster// guinea pig// gerbil// chinchilla// prairie dog// mouse// rathttp://msdn.microsoft.com/zh-cn/library/vstudio/h5181w5w.aspx#Contiguous 恩 msdn的例子我也看了 就是没看明白 把那个例子里的\G删除也不影响结果 所以... 我再仔细看看 我知道了 比如 'a'b'c"d'e'f'g\G'[a-z]只匹配了'a'b'c 后面的'e'f'g则不匹配 因为中间有个"d "d匹配不了 后面就不匹配了? 对不 java perl .net貌似是这样 php ruby 不知道是不是必须是上一次的匹配结束位置 这流派 《精通正则表达式》一书中有专门的说明,第三版在130页PHP和Ruby中的\G指向当前匹配的开头位置,而Perl、java.util.regex和.NET匹配上一次匹配的结束位置 \G 和\A、\Z之类的元字符,可以算是正则中比较生僻的元字符了,绝大多数情况下我们是用不到的,至少在我回答的所有CSDN正则问题中,还没有哪一个是必须用\G来解决的在一些全文检索,或者是多条件的检索中可能会用到,不过确实还没碰到过不得不用的场景 php和ruby 不一定是上一次匹配 只需是当前匹配开头位置 即使中间不连续 后面也可以继续匹配? 没环境 回家按个php试试 下面的图属于哪种控件 C# 文本文档读取 listview显示数据 C#数字取尾数 在线等 静态构造器初始化问题 急死了,半天都没搞定!!! 一个网络问题,设置ftp服务器! 偵測圖檔 .jpg 轉成Binary 关于C#里的数据绑定 100分!!关于做.net安装程序快捷方式问题!紧急!!! vs2008调用VC的dll,如何用dllimport VS2010调试winform时,界面花了是怎么回事?
Q: "0123456789"按每4个分开
A(1): String[] strs = "0123456789".split("(?<=\\G.{4})");
A(2):这个 "(?<=\\G.{4})" 要改为 "(?<=\\G.{4})(?!$)",否则会对 "12345678" 这类长度是 4 的倍数的字符串拆分时最后多一个空串出来。
亮点:\G的使用
连续匹配:\G
\G 定位标记指定匹配必须出现在上一个匹配结束的地方。 通过 Regex.Matches 或 Match.NextMatch 方法使用此定位点时,它确保所有匹配项是连续的。using System;
using System.Text.RegularExpressions;public class Example
{
public static void Main()
{
string input = "capybara,squirrel,chipmunk,porcupine,gopher," +
"beaver,groundhog,hamster,guinea pig,gerbil," +
"chinchilla,prairie dog,mouse,rat";
string pattern = @"\G(\w+\s?\w*),?";
Match match = Regex.Match(input, pattern);
while (match.Success)
{
Console.WriteLine(match.Groups[1].Value);
match = match.NextMatch();
}
}
}
// The example displays the following output:
// capybara
// squirrel
// chipmunk
// porcupine
// gopher
// beaver
// groundhog
// hamster
// guinea pig
// gerbil
// chinchilla
// prairie dog
// mouse
// rathttp://msdn.microsoft.com/zh-cn/library/vstudio/h5181w5w.aspx#Contiguous
\G'[a-z]
只匹配了'a'b'c 后面的'e'f'g则不匹配 因为中间有个"d "d匹配不了 后面就不匹配了? 对不
《精通正则表达式》一书中有专门的说明,第三版在130页
PHP和Ruby中的\G指向当前匹配的开头位置,而Perl、java.util.regex和.NET匹配上一次匹配的结束位置
没环境 回家按个php试试