**[正则-超难]正则的正则[正则-超难]**

add777 2007-08-09 09:38:19
**[正则-超难]正则的正则[正则-超难]**

规则不用说了吧。我的目的,就是需要匹配正则的分组。Regex对象可以得到分组的组号,但是没有分组长度和开始位置。我需要写一个。

要考虑的很多。
abc(?<test>abcd>abc 结果应该是3,13
abc(?:abcd>abc 结果应该是0,0
abc(?'t'o)[^o]*(?'-t')(?(o)(?!)) 这里应该没有分组,当然如果算有。也可以(?!)算一个分组也可以的。
abc(?:(\w)\1)abc 应该是1个分组就是(\w),结果应该是6,3
abc(def(hjl(\w)\3)dst)[^)]*)hefi 应该是3个分组,分别是{3,25},{6,11},{10,3}

呵呵。是复杂了一点。如果还有可能那就是不允许的地方要考虑,例如:
[^(]test[^)]这样的应该是不算分组
([^(]test)这里的分组要考虑括号是否在[]中
(?<xxxx>fds)这是分组
(?<=xxx)这不能算分组
(?<!test)这个也不是分组
...全文
233 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
add777 2007-08-09
  • 打赏
  • 举报
回复
0009(夏天以南) ( ) 信誉:100 2007-08-09 10:47:01 得分: 0


Match m = Regex.Match("123.abc", "(b)");
if (m.Success)
{
Console.WriteLine("Index: {0}", m.Index);
Console.WriteLine("Length: {0}", m.Length);
}


我要的就是这样的东西,不过是正则的正则

Match m = Regex.Match("(b)", "怎么写");
if (m.Success)
{
Console.WriteLine("Index: {0}", m.Index);
Console.WriteLine("Length: {0}", m.Length);
}


fw629 2007-08-09
  • 打赏
  • 举报
回复
接分
RexZheng 2007-08-09
  • 打赏
  • 举报
回复
Match m = Regex.Match("123.abc", "(b)");
if (m.Success)
{
Console.WriteLine("Index: {0}", m.Index);
Console.WriteLine("Length: {0}", m.Length);
}
通者归来 2007-08-09
  • 打赏
  • 举报
回复
结了没?分
wangdetian168 2007-08-09
  • 打赏
  • 举报
回复
看看
O15013245O 2007-08-09
  • 打赏
  • 举报
回复
接分
viena 2007-08-09
  • 打赏
  • 举报
回复
接分~
add777 2007-08-09
  • 打赏
  • 举报
回复
解决方法
写正则匹配最内层分组,替换后再找。递归方式。代码就不帖了。日后有人搜索到这里。这个答案应该算满意了吧。
pol000 2007-08-09
  • 打赏
  • 举报
回复
jf
add777 2007-08-09
  • 打赏
  • 举报
回复
2分钟后结贴。
glacier111 2007-08-09
  • 打赏
  • 举报
回复
帮顶
pol000 2007-08-09
  • 打赏
  • 举报
回复
up
RexZheng 2007-08-09
  • 打赏
  • 举报
回复
尝试了一下,初步结论是
多级嵌套用纯正则无法做到
RexZheng 2007-08-09
  • 打赏
  • 举报
回复

110,499

社区成员

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

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

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