正则表达中 \G 怎么个用法

快乐乔巴 2012-11-02 02:01:36
\G 匹配必须从上一个匹配结束的位置开始
没看明白 比如 \Gabc 和 ^abc 有啥子区别嘛 怎么区分呢在.net中如何运用呢 大家来教教我吧

200分哦 甩了甩了 请说仔细点 有例子对比下就最好了
...全文
603 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
王子文龙 2012-11-02
  • 打赏
  • 举报
回复
大神也不懂么
csdn_风中雪狼 2012-11-02
  • 打赏
  • 举报
回复
学习接分中
看高手解答
快乐乔巴 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

java perl .net貌似是这样 php ruby 不知道是不是必须是上一次的匹配结束位置 这流派


《精通正则表达式》一书中有专门的说明,第三版在130页
PHP和Ruby中的\G指向当前匹配的开头位置,而Perl、java.util.regex和.NET匹配上一次匹配的结束位置
[/Quote]
php和ruby 不一定是上一次匹配 只需是当前匹配开头位置 即使中间不连续 后面也可以继续匹配?
没环境 回家按个php试试
-过客- 2012-11-02
  • 打赏
  • 举报
回复
\G 和\A、\Z之类的元字符,可以算是正则中比较生僻的元字符了,绝大多数情况下我们是用不到的,至少在我回答的所有CSDN正则问题中,还没有哪一个是必须用\G来解决的

在一些全文检索,或者是多条件的检索中可能会用到,不过确实还没碰到过不得不用的场景
-过客- 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

java perl .net貌似是这样 php ruby 不知道是不是必须是上一次的匹配结束位置 这流派
[/Quote]

《精通正则表达式》一书中有专门的说明,第三版在130页
PHP和Ruby中的\G指向当前匹配的开头位置,而Perl、java.util.regex和.NET匹配上一次匹配的结束位置
快乐乔巴 2012-11-02
  • 打赏
  • 举报
回复
java perl .net貌似是这样 php ruby 不知道是不是必须是上一次的匹配结束位置 这流派
EnForGrass 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我知道了 比如 'a'b'c"d'e'f'g
\G'[a-z]
只匹配了'a'b'c 后面的'e'f'g则不匹配 因为中间有个"d "d匹配不了 后面就不匹配了? 对不
[/Quote]
是的,在NET里面是这样的
快乐乔巴 2012-11-02
  • 打赏
  • 举报
回复
我知道了 比如 'a'b'c"d'e'f'g
\G'[a-z]
只匹配了'a'b'c 后面的'e'f'g则不匹配 因为中间有个"d "d匹配不了 后面就不匹配了? 对不
快乐乔巴 2012-11-02
  • 打赏
  • 举报
回复
恩 msdn的例子我也看了 就是没看明白 把那个例子里的\G删除也不影响结果 所以... 我再仔细看看
EnForGrass 2012-11-02
  • 打赏
  • 举报
回复
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
// rat

http://msdn.microsoft.com/zh-cn/library/vstudio/h5181w5w.aspx#Contiguous
q107770540 2012-11-02
  • 打赏
  • 举报
回复
\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
EnForGrass 2012-11-02
  • 打赏
  • 举报
回复
有这么一个


Q: "0123456789"按每4个分开
A(1): String[] strs = "0123456789".split("(?<=\\G.{4})");
A(2):这个 "(?<=\\G.{4})" 要改为 "(?<=\\G.{4})(?!$)",否则会对 "12345678" 这类长度是 4 的倍数的字符串拆分时最后多一个空串出来。
亮点:\G的使用

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧